#include <stdio.h> void swap(int *x, int *y) { int tmp = *x; *x = *y; *y = tmp; } // 将index为根的树调整成对大堆 void HeapAdjust(int *array, int index, int length) { int nChild; int lChild; int rChild; for (; 2 * index + 1 < length; index = nChild) { nChild = lChild = 2 * index + 1, rChild = lChild + 1; if (lChild < length - 1 && array[rChild] > array[nChild]) nChild = rChild; if (array[index] < array[nChild]) { swap( &array[index], &array[nChild]); } else { break; } } } // 堆排序 void HeapSort(int *array, int length) { int i; //从最后一个非叶节点开始调整,将整个数组调整成最大堆 for (i = length/2 - 1; i >= 0; i--) { HeapAdjust(array, i, length); } //从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素 for (i = length - 1; i > 0; i--) { swap(&array[0], &array[i]); HeapAdjust(array, 0, i); } } int main() { int i; int num[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; HeapSort(num, sizeof(num)/sizeof(int)); for (i=0; i < sizeof(num)/sizeof(int); i++) { printf("%d ",num[i]); } return 0; }
当你的才华还撑不起你的野心时,那你就应该静下心来学习。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步