一、概述
堆排序(英語:heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
排序方法
時間複雜度(平均)
時間複雜度 (最壞)
時間複雜度(最好)
空間複雜度
穩定性堆排序
$o(nlogn)$
o(nlogn)
o(nlogn)
o(1)
不穩定在堆的資料結構中,堆中的最大值總是位於根節點(在優先佇列中使用堆的話堆中的最小值位於根節點)。堆中定義以下幾種操作:
1.1、說明
不斷將大根堆的堆頂元素與堆尾元素交換,再重建大根堆的過程。將待排序列構建成大根堆,用變數 heapsize 來控制堆的大小,然後不斷地 heapify ,直到 heapsize 等於零。在 heapify 的過程中就是先比較子節點的大小,然後比較父節點和子節點的大小,如果最後發現父節點是比子節點大的話跳出 heapify 迴圈,否則將子節點與父節點交換,並且找到子節點的左孩子,再重複上訴過程,直到左孩子的位置 left 大於 heapsize ,heapify 迴圈結束.
1.2、**實現
public傳送到class
heapsort
for(int i = 0; i< arr.length; i++)
int heapsize =arr.length;
swap(arr, 0, --heapsize);
while(heapsize > 0)
}private
static
void heapinsert(int arr, int
index)
}private
static
void heapify(int arr, int index, int
heapsize)
swap(arr, largest, index);
index =largest;
left = index * 2 +1;}}
private
static
void swap(int arr, int i, int
j)}
8 排序演算法 堆排序
堆排序 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法 堆排序的平均時間複雜度為 nlogn 1.演算法步驟 建立乙...
JS演算法4 排序 堆排序
堆 是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序 是指利用堆這種資料結構所設計的一種排序演算法 heapinsert arr,index 增大堆結構 先建立大根堆,這是乙個往上走的過程,進來的元素與父元素比,大了就往上走,此時陣列仍為無...
18 排序 堆排序
void selection sort elementtype a,int n 中找到最小元,並將其位置賦給minposition minposition scanformin a,i,n 1 將未排序部分的最小元換到有序部分的最後位置 swap a i a minposition 時間複雜度 t ...