堆排序(Heap Sort)
来源:互联网 发布:windows 安装xcode教程 编辑:程序博客网 时间:2024/06/05 22:54
算法描述:为解决选择排序查找最小元的
复杂度分析:最坏时间复杂度为
主要特点:
- 不稳定;
- 不占用额外内存;
- 但需要构建最大堆,较为麻烦。
C语言描述:
#include<stdio.h>typedef int ElementType;void Swap(ElementType *A, ElementType *B) { ElementType temp = *A; *A = *B; *B = temp;}/* 将N个元素的数组中以A[root]为根的子堆调整为最大堆 */void PercDown(ElementType Data[], int root, int N) { int Parent, Child; ElementType X = Data[root]; /*取出根结点存放的值*/ for (Parent = root; Parent * 2 + 1 < N; Parent = Child) { Child = Parent * 2 + 1; if ((Child != N - 1) && Data[Child] < Data[Child + 1]) Child++; /*Child指向左右子结点的较大者*/ if (X >= Data[Child]) break; /*找到了合适位置*/ else Data[Parent] = Data[Child]; /*下滤X*/ } Data[Parent] = X;}/* 堆排序C语言描述 */void Heap_Sort(ElementType Data[], int N) { int i; for (i = N / 2 - 1; i >= 0; i--) /*建立最大堆*/ PercDown(Data, i, N); for (i = N - 1; i > 0; i--) { Swap(&Data[i], &Data[0]); /*删除最大堆顶*/ PercDown(Data, 0, i); }}int main() { ElementType Data[] = {19, 3, 10, 20, 22, 28, 33, 23, 15, 30}; Heap_Sort(Data, 10); return 0;}
附:特殊说明
- 定理:堆排序处理N个不同元素的随机排列的平均比较次数为
2NlogN−O(NloglogN) ; - 虽然堆排序给出最佳平均时间复杂度,但实际效果不如用Sedgewick增量序列的希尔排序。
阅读全文
0 0
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆排序(Heap-Sort)
- 堆排序(heap sort)
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆排序(heap Sort)
- 堆排序(Heap Sort)
- 堆排序(heap sort)
- 堆排序(Heap Sort)
- 堆排序(Heap-Sort)
- Heap Sort(堆排序)
- 堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序 (Heap Sort)
- 堆排序(Heap Sort)
- heap sort 堆排序
- 将java 文件夹里面的.java 文件 拷贝到temp文件夹下,并且修改后缀名为.txt
- 关于日期转换和自定义日期格式的问题(DateFormat)
- HDU 1176 免费馅饼——DP
- 前端算法之简单排序(JS版)
- leetcode --22. Generate Parentheses
- 堆排序(Heap Sort)
- Removing Columns
- 利用jQuery提取和修改文本内容进而对文本内容进行对调
- 2017.8.16File和IO流的小案列
- Windows上安装多个MySQL实例
- Ceph (分布式文件系统)
- Python pyspider 安装与开发
- JQuery效果
- 知识储备:02数组与字符串:利用哈希表实现动态规划