十大排序演算法之 堆排序 七)

2021-10-08 02:20:15 字數 887 閱讀 6099

堆排序:個人感覺算是十大排序演算法中較難的一種排序演算法。

1、首先了解什麼是堆,需要滿足2個條件

①滿足完全二叉樹(除了最後一層,每一層都是滿的,有右子樹的前提必需有左子樹)。

②堆分為大頂堆和小頂堆,大頂堆---->每乙個節點大於其左右子結點,小頂堆同理。

2、完全二叉樹的特性

① 完全二叉樹適用於陣列儲存

②對於乙個結點為i,其父結點為(i-1)/2,左子結點為2i+1,右子結點為2i+2(如下圖所示)

③對於乙個完全二叉樹非葉子結點為n/2

* 堆排序

* @param arr 陣列

* @param len 陣列長度

*/private

static

void

heapsort

(int

arr,

int len)

}/**

* 堆化

* @param arr 陣列

* @param len 陣列長度

*/private

static

void

heapify

(int

arr,

int len)if(

2* i +

2< len && arr[max]

< arr[

2* i +2]

)swap

(arr, i, max);}

}平均時間複雜度o(nlogn),最壞時間複雜度o(nlogn),最好時間複雜度o(nlogn),不穩定。

十大排序演算法之堆排序

堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法,它是一種選擇排序,時間複雜度是o n log n 本部落格將使用最大堆來實現堆排序。對於堆的具體描述在本部落格的這篇文章 已經對最大堆這種資料結構做出了介紹,故不做重複介紹,主要介紹堆排序。以下是最大堆結構具體實現過程 impo...

十大排序 堆排序

堆排序屬於選擇排序 選擇排序的基本思想 每一趟 第i趟 在後面n i 1個待排序的元素中選取關鍵字最小的元素,作為有序子串行的第i個元素,直到第 n 1趟做完,待排序元素只剩下1個,就不用再選了。堆排序適合關鍵字較多的情況 n 1000 比如 在1億個數中選出前100個最大值?首先使用乙個大小為10...

十大排序演算法之堆排序,最優實現

堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均為0 nlogn 它也是不穩定排序。堆是具有以下性質的完全二叉樹 將待排序序列構造成乙個大頂堆 此時,整個序列的最大值就是堆頂的根節點。將其與末尾元素進行交換,此時末尾就為最大值。然後將剩餘n 1...