對簡單選擇排序的優化。
1、將序列構建成大頂堆。
2、將根節點與最後乙個節點交換,然後斷開最後乙個節點。
3、重複第
一、二步,直到所有節點斷開。
堆排序模擬流程圖:
public
class heapsort
}//對data陣列從0到lastindex建大頂堆
private
static
void
buildmaxheap(int data, int lastindex)
}//如果k節點的值小於其較大的子節點的值
if(data[k]//交換他們
swap(data,k,biggerindex);
//將biggerindex賦予k,開始while迴圈的下一次迴圈,重新保證k節點的值大於其左右子節點的值
k=biggerindex;
}else}}
}//交換方法
排序演算法(四)堆排序
堆排序 是指利用堆積樹 堆 這種資料結構所設計的一種排序演算法,它是選擇排序的一種。堆的定義 乙個完全二叉樹中,任意父結點總是大於或等於 小於或等於 任何乙個子節點,則為大頂堆 小頂堆 完全二叉樹適合採用順序儲存的方式,因此乙個陣列可以看成乙個完全二叉樹。先將初始檔案r n 建立成乙個大頂堆 小頂堆...
swift演算法之排序 (四)堆排序
1 概述 堆排序是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹,並同時滿足堆積的性質 子節點的鍵值或索引總是大於 小於它的父結點。堆又分為 大頂堆 和小頂堆,大頂堆的特點是 該完全二叉樹的根節點比其左右節點都要大,小頂堆的特點是 在小頂堆中根節點比左右子節點的值都要小。1 大頂...
八大排序(四) 堆排序
堆是具有以下性質的完全二叉樹 每個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆 每個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆 如下圖所示 對堆中的結點按層進行編號,將這種邏輯結構對映到陣列中就是下面這個樣子 以上陣列從邏輯上講就是乙個堆結構,用簡單的公式來描述一下堆的定義就是 大頂堆...