(1)基本思想
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆 来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。
(2)代码实现
第一步:先建一个大根堆,由最后一颗子树开始,向下调整。
第二步:0下标与最后一个元素进行交换,然后继续向下调整
public static void heapSort(int[] array) {
createBigHeap(array);
int end = array.length-1;
while (end > 0) {
swap(array,0,end);
shiftDown(array,0,end);
end--;
}
}
public static void createBigHeap(int[] array) {
for (int parent = (array.length-1-1)/2; parent >= 0; parent--){
shiftDown(array,parent, array.length);
}
}
private static void shiftDown(int[] array,int parent,int len) {
int child = 2*parent +1;
while (child < len){
if (child+1 < len && array[child] < array[child+1]) {
child++;
}
if (array[child] > array[parent]) {
swap(array,child,parent);
parent = child;
child = 2*parent +1;
} else {
break;
}
}
}
(3)特性总结
1. 堆排序使用堆来选数,效率就高了很多。
2. 时间复杂度:O(N*logN) ;空间复杂度:O(1)
3. 稳定性:不稳定