堆排序

来源:互联网 发布:《人生》知乎 编辑:程序博客网 时间:2024/06/01 10:45
#include <stdio.h>#include <stdlib.h>void swap(int *a,int *b){if(*a !=*b){*a^=*b;*b^=*a;*a^=*b;}}// s表示源数组,len表示数组大小,target表示要调整点的位置void heapAdjust(int *src, int len, int target){int rc = src[target];int k;for (k = 2*target+1; k < len; k = 2 * k + 1){if(k<len-1 && src[k] < src[k+1]) ++k;if(rc>=src[k]) break;src[target]=src[k];target=k;//src[k]=rc; //可以认为k的位置现在是rc}src[target]=rc;}void heapSort(int *src,int len){int i;for(i=len/2-1;i>=0;--i){heapAdjust(src,len,i);}for(i=len-1;i>0;--i){swap(src,src+i);heapAdjust(src,i,0);}}void pr_arr(int *src,int len){int i=0;for(i=0;i<len;++i){printf("%d ",src[i]);}printf("\n");}int main(void){int src[]={23,21,123,45,67,878,234,876,45,98,3};int len=sizeof(src)/sizeof(int);pr_arr(src,len);heapSort(src,len);pr_arr(src,len);return 0;}

原创粉丝点击