c 最大堆排序

来源:互联网 发布:sql server 2012 64位 编辑:程序博客网 时间:2024/05/18 03:49


 首先,先来看看堆排序的优点,适合哪种数据排序:

1.  堆排序在最坏的情况下,其时间复杂度也能达到O(nlogn)。相对于快速排序来说,这是它最大的优点;

2   堆排序仅需要一个记录大小供交换用的辅助存储空间,空间复杂度O(1

#include<stdio.h>#define n 10/*构建堆*/void buildHeap(int a[],int root,int len){int temp,i,j;temp = a[root];for(i=root*2+1;i<len;i=i*2+1){//判断是否有右节点,如果有,则比较子节点的大小if(i<len-1&&a[i]<a[i+1]){i++;}//比较父节点和子节点的大小if(temp<a[i]){a[root] = a[i];root = i;}else{break;}}a[root] = temp;}/*打印数组*/void print(int a[],int len){int i = 0;for(;i<len;i++){printf("%d\t",a[i]);}}/*堆排序*/void orderHeap(int a[],int len){int i,j,temp; for(i=len/2-1;i>=0;i--){buildHeap(a,i,len);}for(i=1;i<n;i++){temp = a[0];a[0] = a[n-i];a[n-i] = temp;buildHeap(a,0,n-i);}}int main(){int a[n]={3,5,23,78,34,1,7,9,3,10};printf("堆排序之前\n");print(a,n);orderHeap(a,n);printf("\n堆排序结果\n");print(a,n);return 0;}

);