לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 24-05-2010, 03:03
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 1 שנכתבה על ידי mnnn שמתחילה ב "שאלה בC++ מערכים"

טכניקה פרטית של מה שאתה מתאר, תהיה שימוש באלגוריתם מיון כלשהו - לא משנה איזה...
לא רק שתקבל מערך שהמספרים השליליים יהיו לפני האי שליליים - בתוך כל קבוצה (שליליים ואי שליליים) - אתה תקבל מספרים לפי סדר עולה.

אם לא מוגדר לך חסם עליון על היעילות של הקוד, אתה יכול להשתמש באלגוריתם מיון נאיבי.
יש לך את bubble sort שהוא די פשוט למימוש (ובתאכלס, הקוד שלו ממש כתוב באינטרנט, לרמה של לעשות קופי-פייסט).
אם אתה צריך אלגוריתמים יעילים יותר, יש לך את merge sort (המועדף עלי) ואת quicksort (גם להם, פתרונות כתובים באינטרנט).
פה יש לך מימוש די פשוט של Bubble sort, אם אתה רוצה:
http://www.algolist.net/Algorithms/Sorting/Bubble_sort
(תסתכל למטה, יש דוגמאת קוד של ג'אווה ו ++C).

אם אתה לא מחפש פתרון מוכן באינטרנט לקופי-פייסט, הרעיון הוא לרוץ על המערך עם 2 מצביעים.
אחד מצביע על תחילת המערך, והשני מתקדם קדימה ומחפש מספרים שליליים.
כרגע שהוא רואה מספר שלילי, הוא מחליף את הערכים שלו עם המצביע הראשון. מקדמים את המצביע הראשון תא אחד קדימה, והמצביע השני ממשיך לרוץ ולחפש מספרים שליליים... כך עד שמגיעים לסוף המערך.
שיטה זו מזכירה את העבודה של bubble sort רק בלי אפקט המיון הפנימי. כלומר, אין בדיקה כי המספר שהוחלף קטן או גדול ממספרים קודמים לו...

למשל: אם נתון מערך
קוד:
int array[10]={1,-2,3,4,-5,6,-7,-8}

אז בהתחלה, שני המצביעים יצביעו על התא הראשון.
בתחילת הלולאה - מצביע מספר 1 יבדוק האם התא הנוכחי הוא שלילי. אם כן, יחליף את הערכים עם המצביע השני. אם לא (כמו במקרה שלנו, כי המספר הוא 1) הוא יעבור לתא הבא (נגמרה האיטרציה, ועוברים לאיטרציה הבאה בלולאה).
בודקים האם הערך שבמצביע 1 שלילי. הפעם, כן - הערך שלילי, ולכן יוחלפו הערכים שבין מצביע מספר 1 למצביע מספר 2.
כרגע המצב החדש הוא שסדר ההופעה של המספרים הוא:
קוד:
-2,1,3,4,-5,6,-7,-8

מקדמים את מצביע מספר 2 שיצביע על התא הבא (תא 1) ומסיימים את האיטרציה (כלומר, נכנסים לאירטציה הבאה בלולאה).
מצביע מספר 1 ירוץ על התא הבא (הערך שם 3) וכיוון שלא שלילי, יסיים את הלולאה ויכנס לאיטרציה הבאה.
אותו הדבר על התא הבא שערכו 4.
בתא לאחר מכן, הוא יתקל במספר שלילי (מינוס 5) ואז יחליף את הערך שלו עם מצביע מספר 2 (שהוא 1) וכך יכנס מינוס 5 במקום 1, והערך 1 יהיה במקום מינוס 5.
אם עקבת בזהירות - שמת לב שכל המינוסים עוברים לצד שמאל, והחיוביים לצד ימין.

בהצלחה!
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 13:55

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר