堆排序原理和實現

2021-09-27 03:18:07 字數 785 閱讀 4843

1.堆排序原理

2.堆排序的手寫實現

step 1: 構造初始堆

初始化堆時是對所有的非葉子結點進行篩選;

最後乙個非終端元素的下標是[n/2]向下取整,所以篩選只需要從第[n/2]向下取整個元素開始,從後往前進行調整。

step 2:進行堆排序

堆排序是一種選擇排序。建立的初始堆為初始的無序區。

排序開始,首先輸出堆頂元素(因為它是最值),將堆頂元素和最後乙個元素交換,這樣,第n個位置(即最後乙個位置)作為有序區,前n-1個位置仍是無序區,對無序區進行調整,得到堆之後,再交換堆頂和最後乙個元素,這樣有序區長度變為2。

不斷進行此操作,將剩下的元素重新調整為堆,然後輸出堆頂元素到有序區。每次交換都導致無序區-1,有序區+1。不斷重複此過程直到有序區長度增長為n-1,排序完成。

時間複雜度:o(nlogn)

void heapcore(vector&vec ,int size, int end)

i = j;

}while(flag && i < size);

}void heap(vector&vec)

}int main()

堆排序原理及實現

堆排序 堆排序是利用堆的性質進行的一種選擇排序。下面先討論一下堆。1.堆堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 2 或者key i key 2i 1 key key 2i 2 即任何一非葉節點的關鍵字不大於或者不小於其左右孩子節點的...

堆排序原理及其js實現

堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序。首先簡單了解下堆結構。堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為o nlogn 它也是不穩定排序...

堆排序原理及其實現 C

我們知道簡單選擇排序的時間複雜度為o n 2 熟悉各種排序演算法的朋友都知道,這個時間複雜度是很大的,所以怎樣減小簡單選擇排序的時間複雜度呢?簡單選擇排序主要操作是進行關鍵字的比較,所以怎樣減少比較次數就是改進的關鍵。簡單選擇排序中第i趟需要進行n i次比較,如果我們用到前面已排好的序列a 1.i ...