堆排序代码,在测试十万随机生成数情况下,平均运行时间在0.06s,在一百万随机生成数情况下,平均运行时间在0.36s,时间复杂度O(nlgn)。(注意:数组下标为0的项没有参与排序)
#include <stdio.h>
#include <stdlib.h>
/*数据量:十万*/
#define LEN 100000
int size=LEN; /*调整待排序堆得大小*/
void heapSort(int arr[]); /*堆排序算法*/
void buildHeapity(int arr[]);/*建堆算法*/
void heapity(int arr[],int i); /*最大堆化算法*/
int main()
{
int arr[LEN];
int i;
/*生成十万随机数*/
for(i=0;i<LEN;i++)
arr[i]=rand()%1000;
heapSort(arr);
return 0;
}
/*堆排序算法*/
void heapSort(int arr[])
{
int i,temp;
buildHeapity(arr); //建堆
for(i=LEN-1;i>=2;i--)
{
temp=arr[i];
arr[i]=arr[1];
arr[1]=temp;
size--;
heapity(arr,1); //最大堆化
}
}
/*建堆算法*/
void buildHeapity(int arr[])
{
int i;
for(i=(LEN-1)/2;i>=1;i--)
heapity(arr,i);
}
/*最大堆化算法*/
void heapity(int arr[],int i)
{
int key,temp;
if((2*i<size)&&(arr[i]<arr[2*i]))
key=2*i;
else
key=i;
if((2*i+1<size)&&(arr[key]<arr[2*i+1]))
key=2*i+1;
if(i!=key)
{
temp=arr[i];
arr[i]=arr[key];
arr[key]=temp;
heapity(arr,key);
}
}