經典演算法之堆排序

2021-08-11 21:29:30 字數 1385 閱讀 1701

/************************

author's email:[email protected]

date:2017.12.5

堆排序************************/

/*堆是一種資料結構,可以把堆看成一棵完全二叉樹,這棵樹滿足:任何乙個非葉子

結點的值都不大於(或不小於)其左右孩子結點的值。若父親大、孩子小,則這樣的堆

叫做大頂推;若父親小、孩子大,則這樣的堆叫做小頂堆。

堆排序中最關鍵的操作是將序列調整為堆。整個排序的過程就是通過不斷調整,完成一趟,則將

根節點調整到對應的位置,直到所有關鍵字調整完。

下面的**以大頂堆為例。

*/#include

#define maxsize 11

using namespace std;

void

move

(int

*a,int low,

int high)

;void

heapsort

(int

*a,int n)

;//堆排序

void

printarray

(int

*a,int n)

;//輸出陣列

void

main()

;/*構造乙個一維陣列,

因為堆排序是對一棵完全二叉樹排序 ,所以關鍵字的儲存必須從1開始,令a[0]=0並且不用*/

cout <<

"每躺的結果:"

<

heapsort

(a, maxsize-1)

; cout <<

"簡單選擇排序結果為:"

<< endl;

printarray

(a, maxsize-1)

;}/*本函式完成在陣列a[low]和a[high]的範圍內對位置low上的結點進行調整*/

void

move

(int

*a,int low,

int high)

else

break;}

a[i]

= temp;

//被調整結點的值放入最終位置

}/*堆排序函式*/

void

heapsort

(int

*a,int n)

}void

printarray

(int

*a,int n)

以上如有錯誤,請立即指出,我立刻改正。

經典演算法之堆排序

以堆的方式去排序,使最大值位於根節點,之後就縮小尺寸,調整位置。時間複雜度o n logn 不是很穩定 1.建立乙個堆 2.把堆首最大值和堆尾互換位置 3.縮小堆尺寸,調整位置 4.重複 直至堆尺寸為1 private int heapsort int source return arr priva...

經典排序演算法之堆排序

堆排序是一種選擇排序,是不穩定的排序方法。特點 在排序過程中,將排序陣列看成是一棵完全二叉樹儲存結構,利用完全二叉樹中父節點和孩子節點之間的內在關係,在當前無序區中選擇關鍵字最大 最小 的記錄。基本思想 堆分大根堆和小根堆,大根堆是父節點比所有子節點都大,小根堆是父節點比所有子節點都小。下面以大根堆...

經典排序演算法之堆排序

經典排序演算法之堆排序 若以公升序排序說明,把陣列轉換成最大堆積 max heap heap 這是一種滿足最大堆積性質 max heap property 的二叉樹 對於除了根之外的每個節點i,a parent i a i 重複從最大堆積取出數值最大的結點 把根結點和最後乙個結點交換,把交換後的最後...