1.堆排序(heapsort)近似完全二叉树结构,并满足堆积的性质:子节点的键值总小于父节点
时间复杂度O(n*logn),不稳定
2.算法思想:
将初始待排序序列构建成大顶锥
将堆顶元素与最后一个元素交换,此时得到新的无序区和新的有序区
需要对当前无序区调整新堆,然后再一次将堆顶与最后一个元素交换,不断重复此过程,直到有序区元素个数为n-1
3.实例数据说明:
初始构造大顶堆后,交换堆顶与最后一个元素,这时候需要对新的n-1个数,重新构造大顶堆。这时候调用构造大顶堆的函数一样,只是输入参数不同
4.代码实现部分:
void max_heap(int arr[],int start,int end) {
int father = start, son = 2 * father + 1;
while (son<end) {
if (son + 1 < end&&arr[son] < arr[son + 1])
son++;
if (arr[father] > arr[son])
return;
else
{
swap(arr[father] ,arr[son]);
father = son;
son = 2 * father + 1;
}
}
}
void HeapSort(int arr[],int length) {
for (int i = length / 2 - 1; i >= 0;i--) {
max_heap(arr,i,length);
}
for (int j = length-1; j > 0;j--) {
swap(arr[j],arr[0]);
max_heap(arr,0,j);
}
}