איך זה עובד?
שיעור 3 מתוך 9 בקורס מיון ערימה – סדרת DSA של Coddy.
ערימה בינארית מאוחסנת במערך רגיל. עבור הצומת באינדקס i (מתחיל מ-0), הילדים שלו נמצאים באינדקסים 2*i + 1 ו-2*i + 2. זה כל הטריק שמאפשר לעץ להישמר במערך.
תהליך שלב אחר שלב:
- בנו ערימת מקסימום: סדרו מחדש את המערך כך שכל צומת אב יהיה גדול מ- או שווה לילדיו. הערך הגדול ביותר יגיע לאינדקס 0.
- חלצו את המקסימום: החליפו בין השורש (הערך הגדול ביותר) לאיבר האחרון בערימה, ואז צמצמו את הערימה באחד, כך שהערך הגדול ביותר נמצא כעת בסוף, במיקומו הסופי במערך הממויין.
- תקנו באמצעות sift-down: ייתכן שהשורש החדש לא יהיה במקומו, לכן הורידו אותו בערימה (החליפו אותו עם הילד הגדול יותר שלו וחזרו על הפעולה) עד שתכונת הערימה תתקיים שוב.
- חזרו על הפעולה עד שהערימה תהיה ריקה. המערך ממוין כעת בסדר עולה.
דוגמה עבור [4, 10, 3, 5, 1]:
- בנו ערימת מקסימום: [10, 5, 3, 4, 1].
- החליפו בין השורש 10 לאיבר האחרון והורידו אותו בערימה, ואז חזרו על הפעולה עבור 5, 4, 3.
- תוצאה: [1, 3, 4, 5, 10].
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מיון ערימה – סדרת DSA
תרגלו בעצמכם: קומפיילר C אונליין