堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
堆中定义以下几种操作:
1.最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点
2.创建最大堆(Build Max Heap):将堆中的所有数据重新排序
3.堆排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整的递归运算
利用C语言写的堆排序的算法如下:
平均时间复杂度为O(Nlog(N)),最坏时间复杂度为O(Nlog(N)),稳定性为不稳定;
#include<stdio.h>
void swap(int *a,int *b);//交换两个元素
void creat_maxHeap(int A[], int p, int N);//将N个元素的数组A[N]建立为以p为根节点的最大堆
void HeapSort(int A[],int N);//堆排序
int main (void)
{
int i;
int arr[21