🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
![](https://img.kancloud.cn/0b/70/0b70513123d298a416e8b862561efd7e_1120x861.png) ![](https://img.kancloud.cn/d4/d1/d4d1a8fc46251c4952c664111a5e2e67_917x625.png) ``` #include <stdio.h> int count = 0; void swap(int k[], int i, int j) { //交换 int temp; temp = k[i]; k[i] = k[j]; k[j] = temp; } void HeapAdjust(int k[], int s, int n) { int i, temp; temp = k[s]; for( i=2*s; i <= n; i*=2 ) //每次都是跳到左孩子 { count++; if(i<n && k[i] < k[i+1]) i++; //找到孩子节点中的大者 if( temp >= k[i] )break; //如果双亲节点大于孩子节点的大者,跳出循环(不用再循环) k[s] = k[i]; s=i; //交换位置后继续比较 } k[s] = temp; } void HeapSort(int k[], int n) { int i; for( i=n/2; i > 0; i-- ) HeapAdjust(k, i, n); //构造大顶堆 :976435102,然后进行排序 for(i=1;i<10;i++) printf("%d", k[i]); printf("\n\n"); for(i=n;i>1;i--) { swap(k, 1, i); HeapAdjust(k, 1, i-1); //调整父节点与其孩子节点进行比较并交换位置和调整 } } int main() { int i,a[10]={-1,5,2,6,0,3,9,1,7,4}; HeapSort(a, 9); printf("总共执行 %d 次比较!\n",count); printf("排序后的结果是: "); for(i=1;i<10;i++) printf("%d", a[i]); printf("\n\n"); return 0; } ```