排序算法---堆排序

堆積排序(Heapsort)是指利用堆積樹(堆)這種數據結構所設計的一種排序算法,可以利用數組的特點快速定位指定索引的元素。堆排序利用了大根堆(或小根堆)堆頂記錄的關鍵字最大(或最小)這一特徵,使得在當前無序區中選取最大(或最小)關鍵字的記錄變得簡單。

堆排序的排序思想:
利用大頂堆(小頂堆)堆頂記錄的是最大關鍵字(最小關鍵字)這一特性,使得每次從無序中選擇最大記錄(最小記錄)變得簡單。

1)將初始待排序關鍵字序列(R1,R2….Rn)構建成大頂堆,此堆爲初始的無序區;

2)將堆頂元素R[1]與最後一個元素R[n]交換,此時得到新的無序區(R1,R2,……Rn-1)和新的有序區(Rn),且滿足R[1,2…n-1]<=R[n];

3)由於交換後新的堆頂R[1]可能違反堆的性質,因此需要對當前無序區(R1,R2,……Rn-1)調整爲新堆,然後再次將R[1]與無序區最後一個元素交換,得到新的無序區(R1,R2….Rn-2)和新的有序區(Rn-1,Rn)。不斷重複此過程直到有序區的元素個數爲n-1,則整個排序過程完成。

排序過程:
1、根據給定的數組構造一個二叉樹,
2、然後構造一個大頂堆
3、根節點和最後一個元素交換,然後重新調整堆,但是不再調整最後一個元素。
4、以此類推

算法性能:
堆排序是不穩定的排序方法,輔助空間爲O(1), 最壞時間複雜度爲O(nlog2n) ,堆排序的堆序的平均性能較接近於最壞性能。

java代碼:

這裏寫代碼片
發佈了161 篇原創文章 · 獲贊 91 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章