大端堆排序算法
内部排序直接插入排序算法折半插入排序希尔排序算法冒泡排序算法快速排序算法简单选择排序算法外部排序voidswap(int*a,int*b){inttmp*a;*a*b;*btmp;}// 调整堆voidHeadAdjust(intA[],intk,intlen){// A[0]暂时存孩子树的根节点A[0]A[k];for(inti2*k;ilen;i*2){// i如果等于len则没有右子树也就没有比较左右子树的必要if(ilenA[i]A[i1]){i;}if(A[i]A[0]){break;}else{// 将A[i]复制到父节点A[k]A[i];// 修改k, 用以定位子树根节点应该放置的位置ki;}}A[k]A[0];}// 建堆voidBuildMaxHeap(intA[],intlen){for(intilen/2;i0;i--){HeadAdjust(A,i,len);}}// 堆排序voidHeapSort(intA[],intlen){BuildMaxHeap(A,len);for(intilen;i1;i--){// 将根节点与末尾结点交换位置那么最大元素就被移到数组最后面swap(A[i],A[1]);// 同时调整堆的时候只对前面i-1元素进行这样影响不到后面自己排好的元素HeadAdjust(A,1,i-1);}}intmain(){inta[]{0,3,4,6,8,5,7,9,2,1};intlensizeof(a)/sizeof(a[0]);HeapSort(a,len-1);for(inti0;ilen;i){printf(%d\n,a[i]);}return0;}执行结果