堆排序學習

2021-08-14 15:40:25 字數 1478 閱讀 4072

資料來自 靜默虛空 萬分感謝 做筆記用

(1)根據初始陣列去構造初始堆(構建乙個完全二叉樹,保證所有的父結點都比它的孩子結點數值大)。

(2)每次交換第乙個和最後乙個元素,輸出最後乙個元素(最大值),然後把剩下元素重新調整為大根堆。

設有乙個無序序列

構建初始堆

完整的堆排序處理:

// 如果父結點的值已經大於孩子結點的值,則直接結束

if (rootvalue >= array[childindex])

break;

// 把孩子結點的值賦給父結點

array[rootindex] = array[childindex];

// 選取孩子結點的左孩子根結點,繼續向下篩選

// 重點 繼續往下比較

rootindex = childindex;

childindex = 2 * childindex + 1;

}array[rootindex] = rootvalue;

}public

void heapsort(int list)

//上個迴圈的目的是找到大根堆

system.out.println("-------------分割線 -----------------");

// 進行n-1次迴圈,完成排序

for (int i = list.length - 1; i > 0; i--)

}// 列印序列

public

void printpart(int list, int begin, int end)

for (int i = begin; i <= end; i++)

system.out.println();

}public

static

void main(string args) ;

// 呼叫快速排序方法

heapsort heap = new heapsort();

// system.out.print("排序前:\t");

// heap.printpart(array, 0, array.length - 1);

heap.heapsort(array);

// system.out.print("排序後:\t");

// heap.printpart(array, 0, array.length - 1);}}

堆排序學習

參考博主dreamcatcher cx 這位博主還有許多優秀的排序方法學習記錄 構建n次最大堆,每次構建頂點元素即為陣列最大元素,找到最大元素之後將最大元素放在陣列最後 從最後乙個非葉子節點開始,將該節點調整最低階節點,也即它的小於父節點大於兩個子節點 調整次數為n 2 1 完成最大堆的構建之後,將...

堆排序學習筆記

參考此文的學習筆記 不用交換,則已經是最大堆,不用迴圈了 else break void sort int a,int length 開始排序,排序是從上到下從左到右的調整 for int j length 1 j 0 j int main sort a,length for int i 0 i l...

堆排序詳細學習

首先要明白堆是基於二叉樹而言的,堆是二叉樹的一種形式。並且堆是完全二叉樹,具有完全二叉樹的特點。堆只有2種 大頂堆和小頂堆。大頂堆 就是根節點大於子節點,小頂堆反之。下面上圖 一棵完全二叉樹如何才能轉換成乙個堆呢?把握好堆的特點 大頂堆的根永遠大於左右孩子,那麼只需要把每乙個子樹中的左右孩子的較大值...