פסאודו־קוד
שיעור 4 מתוך 9 בקורס מיון ערימה – סדרת DSA של Coddy.
siftDown(array, i, size):
loop:
largest = i
left = 2*i + 1
right = 2*i + 2
if left < size and array[left] > array[largest]: largest = left
if right < size and array[right] > array[largest]: largest = right
if largest == i: stop
swap array[i] and array[largest]
i = largest
heapSort(array):
n = length(array)
for i from n/2 - 1 down to 0: # build max-heap
siftDown(array, i, n)
for end from n-1 down to 1: # extract max repeatedly
swap array[0] and array[end]
siftDown(array, 0, end)- siftDown דוחפת צומת אב קטן מדי כלפי מטה מעבר לילד הגדול יותר שלו, עד שתכונת ערימת המקסימום חוזרת.
sizeמציין איזה חלק מהמערך עדיין נמצא בערימה. - שלב הבנייה: הורדת כל צומת שאינו עלה (מההורה האחרון, באינדקס
n/2 - 1, ועד לשורש) הופכת כל מערך לערימת מקסימום. - שלב המיון: בכל צעד מעבירים את הערך המרבי הנוכחי לסוף ומצמצמים את הערימה, כך שהמערך מתמלא בסדר ממוין מהסוף.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מיון ערימה – סדרת DSA
תרגלו בעצמכם: קומפיילר C אונליין