堆排序
a.
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
b.
平均时间复杂度:O(n log n)
c.
实现
将序列按堆的定义建成堆(如大根堆),从而堆顶的关键字最大,将堆顶与堆末交换,这趟得到了最大数,并把末元素从堆中去掉,然后在将堆顶调整为堆,从而堆顶为次大数,如此反复,只到堆中只剩一个元素为止,此时数组的元素为递增序列
d.
C语言
#include<stdio.h>
void Heapadjust(int R[],int s,int m){ //s使R[s]到R[m]为大根堆
int i;
i=s;
int temp=R[i];
for(int j=2*i+1;j<=m;j=2*j+1){
if(j<m && R[j]<R[j+1]){ j++; }
if(temp>=R[j]) break;
R[i]=R[j];
i=j;
}
R[i]=temp;
}
void HeapSort(int R[],int n){//将数组R[0]到R[n-1]中的n个整数进行堆