
24-05-2010, 03:03
|
 |
|
|
חבר מתאריך: 21.12.04
הודעות: 30,020
|
|
טכניקה פרטית של מה שאתה מתאר, תהיה שימוש באלגוריתם מיון כלשהו - לא משנה איזה...
לא רק שתקבל מערך שהמספרים השליליים יהיו לפני האי שליליים - בתוך כל קבוצה (שליליים ואי שליליים) - אתה תקבל מספרים לפי סדר עולה.
אם לא מוגדר לך חסם עליון על היעילות של הקוד, אתה יכול להשתמש באלגוריתם מיון נאיבי.
יש לך את 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) ומסיימים את האיטרציה (כלומר, נכנסים לאירטציה הבאה בלולאה).
מצביע מספר 1 ירוץ על התא הבא (הערך שם 3) וכיוון שלא שלילי, יסיים את הלולאה ויכנס לאיטרציה הבאה.
אותו הדבר על התא הבא שערכו 4.
בתא לאחר מכן, הוא יתקל במספר שלילי (מינוס 5) ואז יחליף את הערך שלו עם מצביע מספר 2 (שהוא 1) וכך יכנס מינוס 5 במקום 1, והערך 1 יהיה במקום מינוס 5.
אם עקבת בזהירות - שמת לב שכל המינוסים עוברים לצד שמאל, והחיוביים לצד ימין.
בהצלחה!
|