Presentation is loading. Please wait.

Presentation is loading. Please wait.

מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997.

Similar presentations


Presentation on theme: "מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997."— Presentation transcript:

1 מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997

2 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 j=15 swap (&a[j],&a[j+1]); }} n=17

3 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 j=14 swap (&a[j],&a[j+1]); }}

4 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 j=13 swap (&a[j],&a[j+1]); }}

5 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 swap (&a[j],&a[j+1]); }}

6 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 swap (&a[j],&a[j+1]); }}

7 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) i=0 swap (&a[j],&a[j+1]); }} אבר מינימאלי i=1

8 BubbleSort 1231156114116319442393564997 for (i=0; i<n-1; i++){ n=17 for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) swap (&a[j],&a[j+1]); }} i=1

9 1231156114116319442393564997 for (i=0; i<n-1; i++){ for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) swap (&a[j],&a[j+1]); }} אבר מינימאלי שני

10 for (i=0; i<n-1; i++){ for (j=n-2; j>=i; j--){ If (a[j] > a[j+1]) swap (&a[j],&a[j+1]); }} 1231156114116319442393564997 i= 0,1,…,n-2 j= n-2,n-3,…,i O(1) סיבוכיות מקום נוסף סיבוכיות זמן

11 BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף

12 HeapSort תור עדיפויות הוא מבנה נתונים המוגדר ע " י הפעולות הבאות : 1.צור ערימה ריקה MakeHeap(Q) - 2.הכנס רשומה x לערימה - Insert(x,Q) 3.הדפס את הרשומה עם המפתח הגדול ביותר - Max(Q) 4.הוצא את הרשומה עם המפתח הגדול ביותר - DeleteMax(Q) 1.MakeHeap(Q) 2.for (i=0 ;i=n-1;i++) Insert(A[i],Q) 3.for (i=n-1;i=0;i--) 4. {A[i]=Max(Q); DeleteMax(Q)}

13 1.MakeHeap(Q) 2.for (i=0 ;i=n-1;i++) Insert(A[i],Q) 3.for (i=n-1;i=0;i--) 4. {A[i]=Max(Q); DeleteMax(Q)} סיבוכיות מקום נוסף סיבוכיות זמן O(1) O(n log n) O(n)O(n)

14 BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSort האם אפשר בסיבוכיות מקום ?O(1)

15 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} 1231156347 12345678 11 9 123115634711 1 23 4567 89

16 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} 1231 1 56 34 711 1 23 4567 89

17 12 31 1 5 6 34 7 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}

18 12 311 5 6 347 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}

19 1231 15 6 34 7 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X}

20 1231 15 6 3 4 7 11 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} בסוף נקבל

21 1231 1 56 34 711 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); \* X=A[1] *\ 4. DeleteMax(A) 5. A[i]=X} בסוף נקבל 1231 1 56 34 711 123456789

22 1.MakeHeap(A) 2.for (i=n;i=2;i--) 3. {X=Max(A); 4. DeleteMax(A) 5. A[i]=X} סיבוכיות זמן O(?) O(log n) O(n)O(n) O(n log n) O(1) סיבוכיות מקום נוסף O(1)

23 1231 1 56 34 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j

24 1231 1 56 34 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j

25 1231 1 5 63 4 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j

26 12 31 1 5 6 34 711 MakeHeap 2. נגש לתת-עץ של צמת שהוא לא עלה 1. כל עלה הוא תת-עץ ערימה 3. נבדוק אם הוא ערימה ז"א אם לא תבציע Sift-down לתת העץ j

27 MakeHeap סיבוכיות זמן

28 MakeHeap סיבוכיות זמן

29

30 הוכחה שניה

31 BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSort

32 QuickSort 1231156114116319442393564997 41 Partition(a,1,17,pivot) QuickSort(a,1,17) 13 =pivot Choose-pivot

33 1231156114116319442393564997 QuickSort(a,1,12) QuickSort(a,13,17)

34 QuickSort(Key *A, int left, int right) int i, j, p; if (left >= right) return ; p = choose_pivot(A,left,right); i = partition(A,left,right,p); QuickSort(A, left, i-1); QuickSort(A,i,right); 1231156114116319442393564997 left right 41 p= 1231156114116319442393564997 i=13 1231156111631923474144935699

35 Partition(A,left,right,p) i=left; j=right; while (A[i]<p) i++; while (A[j]>p) j--; if (i<=j) { swap(a[i],a[j]); i++; j--; } סיבוכיות זמן 1231156114116319442393564997

36 ניתוח זמן של QuickSort Partition(A,1,n,pivot) QuickSort(A,1,n) QuickSort(A,1,n 1 )QuickSort(A, n 1,n) סיבוכיות זמן סיבוכיות מקום נוסף

37 המקרה הגרוע סבוכיות מקום נוסף סבוכיות זמן

38 המקרה הטוב סבוכיות מקום נוסף סבוכיות זמן

39 המקרה הממוצע נוסחת הנסיגה דומה לנוסחת הנסיגה למספר ההשוואות הנדרש לבניית עץ חיפוש בינרי אקראי. שיטת הפתרון זהה. פרטים בספר הלימוד, פרק 8. סבוכיות זמן בחירה רנדומלית של ציר

40 סבוכיות מקום נוסף ממוצע פתרון

41 BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSortQuickSort ממוצע

42 נראה ממוש ל-QuickSort שיתן סבוכיות מקום נוסף מדויק QuickSort(A, left, right) while (left < right){ p = choose_pivot(A,left,right); i = partition(a,left,right,p); if (i-1 < right – i + 1) QuickSort(A, left, i-1); left = i ; else QuickSort(A, i, right); right = i - 1 ; i leftright leftright

43 BubbleSort סיבוכיות זמן סיבוכיות מקום נוסף HeapSortQuickSort ממוצע


Download ppt "מיון (Sorting) קלט : מערך בן n מספרים. פלט : מערך ובו המספרים אותם מאוחסנים בסדר עולה. 12311561141163194423935649971231156114116319442393564997."

Similar presentations


Ads by Google