堆排序
来源:互联网 发布:js 验证码倒计时 编辑:程序博客网 时间:2024/06/07 05:32
堆排序过程
1. 建立堆
2. 对堆排序
统计大文件中数据单词次数前k的问题中需要应用。
注意 :
1. 堆的建立过程是从底自上;
2. 堆的排序过程是从上自下,其过程很好理解,在建立堆的过程中要从底部向上调整元素,保证底部子节点小于父节点,如果先从父节点开始,则不能保证此性质;排序过程则需要将最大元素(最小元素)排除出去,所以是堆顶开始,从上自下调整的。
// an index in arr[]. n is size of heapvoid heapify(int arr[], int n, int i){ int largest = i; // Initialize largest as root int l = 2*i + 1; // left = 2*i + 1 int r = 2*i + 2; // right = 2*i + 2 // If left child is larger than root if (l < n && arr[l] > arr[largest]) largest = l; // If right child is larger than largest so far if (r < n && arr[r] > arr[largest]) largest = r; // If largest is not root if (largest != i) { swap(arr[i], arr[largest]); // Recursively heapify the affected sub-tree heapify(arr, n, largest); }}// main function to do heap sortvoid heapSort(int arr[], int n){ // Build heap (rearrange array) for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); // One by one extract an element from heap for (int i=n-1; i>=0; i--) { // Move current root to end swap(arr[0], arr[i]); // call max heapify on the reduced heap heapify(arr, i, 0); }}
http://www.geeksforgeeks.org/heap-sort/
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- heartbeat实现HA!!
- Jacky,我为你高兴!
- android BottomNavigationView(底部导航栏)
- 试求N个节点所能组成的二叉树的个数以及求解方法
- 机器学习&深度学习视频资料大汇总
- 堆排序
- javascript与node.js的区别
- 《Android源码设计模式解析与实战》读书笔记(十八)——代理模式
- 走出循环结构的几种方法:continue,break,goto,return
- 顺序表(静态)
- 程序员的自我修养
- c链表
- Delphi 接口编程之:接口委托
- Javascript事件机制