堆排序原理:
堆的结构类似于完全二叉树,头节点位于整个结构的最上方,每个父节点从左到右依次分岔,延申出两个子节点。
每层节点从左到右在数据中是依次排列的关系。
堆中某个结点的值总是不大于其父结点的值(大顶堆:头节点值最大)。堆中某个结点的值总是不小于其父结点的值(小顶堆:头节点值最小)。
堆排序的基本思想是:1、将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素;2、将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;3、重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了。
#include <stdio.h> #define size 10 void Swap(int *num, int i, int j) { int temp; temp = num[i]; num[i] = num[j]; num[j] = temp; } // 最大堆调整 void Heapify(int *num, int len, int k) { if (k < len) { int root = k; // 根结点 int lchild = 2*k + 1; // 左孩子结点 int rchild = 2*k + 2; // 右孩子结点 // 查找左右孩
C语言堆排序
最新推荐文章于 2024-09-13 22:53:35 发布
堆排序是一种基于比较的排序算法,它通过构建大顶堆(或小顶堆)来找到序列中的最大值(或最小值),并将最大值与末尾元素交换,然后对剩余元素重新构建堆,重复该过程,最终得到有序序列。文章详细介绍了堆排序的原理,包括堆的结构、最大堆调整、创建最大堆以及堆排序的步骤。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



