פורסם 2010 במאי 2315 שנים שלום,צריך לכתוב פונצקיה הקולטת מערך של מספרים שלמים ואת גודלו ומשנה את סדר הנתונים במערך כך שקודם יופיעו כל המספרים השליליים ואחריהם כל האי שליליים.void splitArray(int arr[], int size);מישהו שיכול להגיד לי איך עושים את זה?תודה מראש =]
פורסם 2010 במאי 2315 שנים תחזיק שני אינדקסים - אחד המצביע לתחילת המערך, ואחד המצביע לסופו.תעבור על המערך, וכל פעם "תדחוף" את המספר הנוכחי למקום המתאים (תחילת המערך או סופו).
פורסם 2010 במאי 2915 שנים יש כמה דרכים אחת הפשוטות (בהינתן זה שלא הגבילו אותך בשיעורי בית או משהו..)זה פשוט ליצור עוד מערך באותו גודלint blah = (int*) malloc(sizeof(int)*size)pעכשיו blah הוא מערך של int בגודל sizeעכשיו תעבור על המערך שלך איבר איבר וכל פעם שהגעת לאיבר שלילי תכניס אותו למקום הראשון במערך החדש ואז תקדם אינדקס על המערך החדש שתדע איפה האיבר האחרון.אחרי שעברת על כל המערך הרגיל תעבור עליו שוב וכל פעם שאתה מגיע למספר אישלילי תכניס אותו למערך החדש לפי האינדקס ותקדם את האינדקס.ובסוף תעתיקאת כל המערך החדש למערך הישן.כמובן שזו דרך טריוויאלית ללא מיון ולא כלום אבל עובדת.דרך יותר יפה טיפה יותר מסובכת בהבנה אבל המימוש לא הרבה יותר קשה היא כזו:תאתחחל 2 אינדקסים i,k אחד מאותחל ל0 השני לsizeתלך מתחילת המערך ותקדם את האינדקס עד שתמצא את האיבר האישלילי הראשון ברגע שמצאת אותו עצורתלך מסוף המערך ותקטין את האינדקס עד שתמצא את האיבר השלילי הראשון ברגע שמצאת תבדוק האם האינדקס השני קטן מהאינדקס הראשון אם כן תחזיר את המערך שלך כי הוא כבר ממויין כפי שביקשואם לא החלף בין 2 האיברים שנמצאים באינדקסים וחזור לתחילת הלולאה.
פורסם 2010 במאי 3015 שנים יש כמה דרכים אחת הפשוטות (בהינתן זה שלא הגבילו אותך בשיעורי בית או משהו..)זה פשוט ליצור עוד מערך באותו גודלint blah = (int*) malloc(sizeof(int)*size)pעכשיו blah הוא מערך של int בגודל sizeעכשיו תעבור על המערך שלך איבר איבר וכל פעם שהגעת לאיבר שלילי תכניס אותו למקום הראשון במערך החדש ואז תקדם אינדקס על המערך החדש שתדע איפה האיבר האחרון.אחרי שעברת על כל המערך הרגיל תעבור עליו שוב וכל פעם שאתה מגיע למספר אישלילי תכניס אותו למערך החדש לפי האינדקס ותקדם את האינדקס.ובסוף תעתיקאת כל המערך החדש למערך הישן.כמובן שזו דרך טריוויאלית ללא מיון ולא כלום אבל עובדת.דרך יותר יפה טיפה יותר מסובכת בהבנה אבל המימוש לא הרבה יותר קשה היא כזו:תאתחחל 2 אינדקסים i,k אחד מאותחל ל0 השני לsizeתלך מתחילת המערך ותקדם את האינדקס עד שתמצא את האיבר האישלילי הראשון ברגע שמצאת אותו עצורתלך מסוף המערך ותקטין את האינדקס עד שתמצא את האיבר השלילי הראשון ברגע שמצאת תבדוק האם האינדקס השני קטן מהאינדקס הראשון אם כן תחזיר את המערך שלך כי הוא כבר ממויין כפי שביקשואם לא החלף בין 2 האיברים שנמצאים באינדקסים וחזור לתחילת הלולאה.הפתרון השני שלך הוא הפתרון הידוע והמקובל למי שלא יודע זה פעולה שקוראים לה partition והיא חלק מהquicksortרק ששם זה לא שליליים ואי שליליים אלא מעל מספר מסויים ומתחתיותוכל למצוא אלף פתרונות באינטרנט לאלגוריתם הזה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.