堆排序詳解

2021-10-19 07:49:53 字數 612 閱讀 4984

void maxheapify(vector& a, int i, int heapsize)  

if (r < heapsize && a[r] > a[largest]) *將根,左右孩子最大的元素的下標賦值給largest變數

if (largest != i)

}void buildmaxheap(vector& a, int heapsize)

}

heap = [1,3,4,2,6,8,9]

# heap = [3,2,4,9,6,8] #刪除堆頂後將堆尾放到堆頂,然後下沉,只是被交換節點下沉,這裡是根節點(執行void minheapify)

heap = [1,3,4,2,6,8,9]

#[0, 1, 4, 3, 6, 8, 9, 2]#j將新插入的元素在當前堆中找到它的位置

heapq.heapify(nums)#將列表轉換為小根堆
不論是插入還是刪除後的處理,本質都是一樣的,都是找到某乙個節點在當前堆的位置,用的就是maxheapify函式的原理,注意該函式中largest表示永遠都是一開始節點的那個值(這是精髓)。

排序詳解 堆排序

堆排序 heapsort 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選擇排序的一種。可以利用陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大於其父節點的值,即a parent i a i 在陣列的非降序排序中,需要使用的就是大根...

堆排序詳解

一 堆的定義 堆的定義如下 n個關鍵字序列l n 成為堆,當且僅當該序列滿足 l i l 2i 且l i l 2i 1 或者 l i l 2i 且l i l 2i 1 其中i屬於 1,n 2 滿足第 種情況的堆稱為小根堆 小頂堆 滿足第 種情況的堆稱為大根堆 大頂堆 在大根堆中,最大元素存放在根結點...

堆排序詳解

public class heapsort 此時已經完成了最大堆的構建,下面進行排序。for int i len 1 i 0 i 維護最大堆,保證父節點大於等於子節點 public static void maxheapify int a,int index,int len if rightchil...