堆排序练习代码
来源:互联网 发布:深圳 百创装饰 知乎 编辑:程序博客网 时间:2024/06/03 23:46
练习题目:递增堆排序(算法)
相关介绍:
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
最大堆是二叉堆的两种形式之一。 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆
最大堆,将角标i的结点与其两个子结点构成“局部最大堆,如果发生了父结点和子结点交换,则对被交换的子结点位置继续向下递归构建最大堆。函数执行后,该结点与其子树则构成完整的最大堆。其时间复杂度为O(lgn)。
<span style="font-size:14px;">/// Make i node and its subtrees a max-heap treevoid Max_Heapify(int* a, int size, int i){int l = 2 * i, r = 2 * i + 1;int largest = i;int exchange;//Compare with left childif (l<size&&a[l]>a[i])largest = l;elselargest = i;//Compare with right childif (r<size&&a[r]>a[largest])largest = r;//It need to exchange with child nodeif (largest != i){exchange = a[i];a[i] = a[largest];a[largest] = exchange;//Make exchanged node and its subtrees a max-heap treeMax_Heapify(a, size, largest);}}</span>
将无序的数组构建为最大堆。从最后一个元素的父结点开始向上遍历,对每个结点执行Max_Heapify函数。时间复杂度为O(nlgn)。
<span style="font-size:14px;">/// Build a max-heap treevoid Build_Max_Heap(int* a, int size){int i;for (i = size / 2 - 1; i >= 0; --i){Max_Heapify(a, size, i);}}</span>
堆排序函数。对已经构建好的最大堆进行排序。相应的,递增排序需要构建最大堆,递减排序需要构建最小堆。时间复杂度O(nlgn)。
<span style="font-size:14px;">/// Heap sortvoid HeapSort(int* a, int size){int i;int exchange;for (i = size - 1; i >= 0; --i){exchange = a[i];a[i] = a[0];a[0] = exchange;--size;Max_Heapify(a, size, 0);}}</span>
<span style="font-size:14px;">int main(){int i;int a[] = { 1, 56, 32, 42, 78, 60, 0, 23, 100, -6, -20, 56, 27 };Build_Max_Heap(a, sizeof(a) / sizeof(int));HeapSort(a, sizeof(a) / sizeof(int));for (i = 0; i < sizeof(a) / sizeof(int); ++i)printf("%d ", a[i]);puts("");}</span>
<span style="font-size:18px;">-20 -6 0 1 23 27 32 42 56 56 60 78 100 </span>
0 0
- 堆排序练习代码
- 编程练习:堆排序
- [每日练习]堆排序
- 堆排序的练习
- Kotlin练习-堆排序
- Scala练习-堆排序
- 最小堆练习代码
- 算法练习二 堆排序
- 堆排序练习:POJ 2388
- 堆排序练习(手痒)
- 堆排序练习(Heap Sort)
- 练习——堆排序
- 堆排序代码
- 堆排序Java代码
- 堆排序《代码》
- 堆排序 经典代码
- 堆排序代码
- 堆排序详细代码
- 二叉树的层序遍历 先序遍历
- 从锁的角度理解线程
- hdu 1995 汉诺塔V(推公式+dp)
- iOS网络资源缓存ZCLURLCache·下篇
- iOS崩溃、异常---看的想睡觉(待续)
- 堆排序练习代码
- HDU-2551 竹青遍野 数学题
- iOS本地推送实现过程
- 类目延展代理协议--复习篇
- nginx启动/重启/停止脚本
- web访问找不到相关页面时,可以自己定义404 500
- 大道至简,职场上做人做事做管理
- 怎么感动不了你呢??
- 【分析】多dex加载机制