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

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



  #3  
ישן 13-01-2011, 22:14
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי bobka שמתחילה ב "צריך עזרה לבנות אלגוריתם"

"לעבור" הכוונה "לקרוא את תוכנו", כן? ולא להצבה של ערך חדש...

אם כן, צור לעצמך משתנים i, j, k ותציב בהם 0

לולאת for פשוטה מ 0 עד N-1

בכל איטרציה של הלולאה, switch על התא הנוכחי במערך. אם 0, אז i++. אם 1, אז j++, אם 2, אז k++.

לאחר מכן:
הצב l = 0

while על i > 0, שמבצע בלוק שעושה i-- ומציב במערך 0 בתא הנוכחי של המערך [l] ואז עושה l++
while על j > 0, שמבצע בלוק שעושה j-- ומציב במערך 1 בתא הנוכחי של המערך [l] ואז עושה l++
while על k > 0, שמבצע בלוק שעושה k-- ומציב במערך 2 בתא הנוכחי של המערך [l] ואז עושה l++

כל זה בהנחה שההנחה הראשונית שלי נכונה. אחרת העניין לא ברור לי, אבל אולי אני מפספס משהו כי אני ממש עייף.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 13-01-2011, 22:21
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 5 שנכתבה על ידי stomer שמתחילה ב "גם אני הבנתי את זה ככה. ונראה..."

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

וגם לא ברור איך אתה משתמש באינדקסים שרמזו לו להשתמש...

אני חושב שהמטרה שלהם הייתה לאסור עליו להשתמש במיון בועות...

אבל אדרבה, אשמח לראות אלגוריתם שרק קורא, או רק כותב, למערך, והופך אותו לממויין.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 14-01-2011, 00:07
צלמית המשתמש של High_Hopes
  משתמש זכר High_Hopes High_Hopes אינו מחובר  
 
חבר מתאריך: 30.05.02
הודעות: 8,838
בתגובה להודעה מספר 1 שנכתבה על ידי bobka שמתחילה ב "צריך עזרה לבנות אלגוריתם"

עריכה: רק עכשיו שמתי לב שהדרישה היא לעבור על כל תא רק פעם אחת, לא על המערך כולו פעם אחת, כל התשובה שלי לא שווה כלום - משהו בשאלה לא הגיוני, אין אף דרך לדעת איפה מתחיל/נגמר האחד אם לא עוברים על איברים לפני.

אני מנסה לחשוב על כיוון - אפשר לשים אינדקס עולה בתחילת המערך ואינדקס יורד בסופו, נבדוק רק את ה0 וה2 ונתעלם מה1, בהפרש שישאר יהיה אחד.


קוד PHP:
 int i,j,k;
i=0;
j=N-1;
k=i;
while (
arr[i]==&& i<=j)
{
   
i++   //נדלג על כל האפסים בהתחלה אם הם קיימים
}
while (
arr[j]==&& j>=0)
{
   
j++;  //נדלג על כל ה2 בסוף אם הם קיימים
}

k=i+1;
while (
i<|| k<j)
{
   if (
arr[i]==0)
   {
       
i++;
       if (
i==k)
           
k++;
   }
   else if (
arr[j]==2)
      
j--;
   }
   else if(
arr[i]==&& arr[j]==0)
   {  
       switch(
arr[i],arr[j]);
       
i++;
       if (
i==k)
            
k++;
       
j--;
   }
   else if (
arr[i]==&& arr[k]==0)
   {
      switch (
arr[i],arr[k]);
      
i++;
      
k++;
    }
   else if (
arr[j]==&& arr[k]==2)
   {
      switch (
arr[j],arr[k]);
      
j--;
      
k++;
    }
   else if (
arr[j]==&& arr[i]==1)
   {
      
arr[i]=0;
       
i++;
      
k++;    //we already know that k==1, no need to check,and we keep j on 1
    
}
   else if (
arr[j]==&& arr[i]==2)
   {
      
arr[j]=2;
       
j--;
      
n++;    //we already know that k==1, no need to check,and we keep i on 1
    
}



אני לא בטוח שאין פה טעויות, זה גם לא ב100% ריצה אחת על המערך אבל זה הכי קרוב שאני יכול לחשוב.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
הגלריה שלי בפליקר


נערך לאחרונה ע"י High_Hopes בתאריך 14-01-2011 בשעה 00:22.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 15-01-2011, 18:45
צלמית המשתמש של nstrike
  nstrike nstrike אינו מחובר  
 
חבר מתאריך: 12.11.04
הודעות: 580
אני לא בטוח שזה עובר רק פעם אחת על המערך, אבל זה מה שהצלחתי...
בתגובה להודעה מספר 1 שנכתבה על ידי bobka שמתחילה ב "צריך עזרה לבנות אלגוריתם"

קוד:
public static void Switch(ref int a, ref int b) { int temp = a; a = b; b = temp; } public static void Sort(int[] a) { int i = 0, j = a.Length - 1, k = -1; while (i <= j) { if (a[i] == 0 && a[j] == 0) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } i++; while (i <= j && a[i] != 2) { if (a[i] == 0) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } } else if (a[i] == 1) { if (k == -1) { k = i; } } i++; } if (i > j) { break; } else { Switch(ref a[i], ref a[j]); if (k > -1) { Switch(ref a[k], ref a[i]); k++; } i++; j--; } } else if (a[i] == 0 && a[j] == 1) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } i++; while (i <= j && a[i] != 2) { if (a[i] == 0) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } } else if (a[i] == 1) { if (k == -1) { k = i; } } i++; } if (i > j) { break; } else { Switch(ref a[i], ref a[j]); if (k == -1) { k = i; } i++; j--; } } else if (a[i] == 0 && a[j] == 2) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } i++; j--; } else if (a[i] == 1 && a[j] == 0) { if (k == -1) { k = i; } i++; while (i <= j && a[i] != 2) { if (a[i] == 0) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } } else if (a[i] == 1) { if (k == -1) { k = i; } } i++; } if (i > j) { break; } else { Switch(ref a[i], ref a[j]); if (k > -1) { Switch(ref a[k], ref a[i]); k++; } i++; j--; } } else if (a[i] == 1 && a[j] == 1) { if (k == -1) { k = i; } i++; while (i <= j && a[i] != 2) { if (a[i] == 0) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } } else if (a[i] == 1) { if (k == -1) { k = i; } } i++; } if (i > j) { break; } else { Switch(ref a[i], ref a[j]); if (k == -1) { k = i; } i++; j--; } } else if (a[i] == 1 && a[j] == 2) { if (k == -1) { k = i; } i++; j--; } else if (a[i] == 2 & a[j] == 0) { Switch(ref a[i], ref a[j]); if (k > -1) { Switch(ref a[k], ref a[i]); k++; } i++; j--; } else if (a[i] == 2 && a[j] == 1) { Switch(ref a[i], ref a[j]); if (k == -1) { k = i; } i++; j--; } else if (a[i] == 2 & a[j] == 2) { j--; while (i <= j && a[j] == 2) { j--; } if (i > j) { break; } else { Switch(ref a[i], ref a[j]); if (a[i] == 0) { if (k > -1) { Switch(ref a[k], ref a[i]); k++; } } else if (a[i] == 1) { if (k == -1) { k = i; } } i++; j--; } } } }
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.11 שניות עם 10 שאילתות

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

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