是一高等排序演算法,為selection sort的改良。
基本概念:和selection sort一樣將數列分成未排序及已排序兩部分,將未排序的資料中找出最大(最小)的元素插入至已排序好的數列中的最右(左)端。
而Heap sort的改良是將選擇最大(最小)的方法改進,使用Heap Tree做資料結構,搜尋時最多只需搜尋樹根到葉的路徑,不再需要搜尋整個未排序的數列,大大增進速率。
Time complexity:
Best.Worst.Average case皆為O(n log n)。
Unstable。
ex: Input:5,5*,1
5
/ \
5* 1
Output:1,5*,5
II. HeapSort(tree,n) //排序tree:[1...n]
{for i=n/2 down to 1 do
Adjust(tree,i,n);
for i=n-1 down to 1 do
{swap(tree[1],tree[i+1]);
Adjust(tree,1,i);
}
}