Heap 排序
来源:互联网 发布:ubuntu 断电日志 编辑:程序博客网 时间:2024/05/20 05:08
Heap排序想必大家都知道。
Heap的主要是通过完全二叉树的形式来构建。这样的构建是平横二叉树(树的高度为lg(N))。
主要特点是:
1. 根节点用来存最大或者最小的树值(利用此特征,可以来做优先队列)。
2. 节点i的值都大于或者小于其子节点(注意啦,heap有,max heap 和min heap之分)。
heap排序的大概流程,也就是
1. 构建heap。
2. 删除根节点,最大或者最小值
3. 重新构建heap, 跳到2,直到heap的size为零。
时间复杂度为O(nlgn)
一下是heap的java版本。
public class MyHeap{public static void main(String[] args){int[] array = {4, 1, 3, 2, 5};MyHeap heap = new MyHeap(array);heap.print();heap.buildHeap();//heap.sort();heap.print();}private int[] array;public MyHeap(int[] array){this.array = array;}public int size(){return array.length;}private void maxHeap(int i){int l = left(i);int r = right(i);int mx = i;if(l < size() && array[l] > array[i])mx = l;if(r < size() && array[r] > array[mx])mx = r;if(mx != i){swap(mx, i);maxHeap(mx);}}public void sort(){buildHeap();for(int i = size() - 1; i >= 0; i--){swap(i, 0);maxHeap(0, i);}}/** * index and size * */private void maxHeap(int i, int len){int l = left(i);int r = right(i);int mx = i;if(l < len && array[l] > array[i])mx = l;if(r < len && array[r] > array[mx])mx = r;if(mx != i){swap(mx, i);maxHeap(mx, len);}}private void swap(int i, int j){int tmp = array[i];array[i] = array[j];array[j] = tmp;}public void buildHeap(){int half = size()/2;for(int i = half; i >=0; i--){maxHeap(i);}}public int left(int idx){return idx * 2 + 1;}public int right(int idx){return 2 * (idx + 1);}public int parent(int idx){return (idx-1)/2;}public void print(){System.out.print("[");for(int i : array){System.out.print(i + " ");}System.out.println("]");}}
0 0
- heap排序
- heap 排序
- Heap 排序
- 堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序(Heap Sort)
- 堆排序 (Heap Sort)
- 堆排序(Heap Sort)
- Heap-堆排序
- (14)heap排序
- heap sort 堆排序
- 结构体-heap排序
- 堆排序 Heap Sort
- 堆排序 Heap Sort
- 堆排序 (Heap Sort)
- 堆排序Heap sort
- 堆排序 Heap Sort
- 堆排序(Heap Sort)
- static_cast、dynamic_cast、reinterpret_cast和const_cast
- 1.2 内容综述 2.5 进程控制 2.6 linux内核对内存的使用方法
- handler 警告This Handler class should be static or leaks might occur 的回调解决方法
- poj 1816 Wild Words(字典树+DFS)
- 十一月份计划
- Heap 排序
- IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化
- new和malloc
- 整数溢出小问题
- 接口
- Young氏矩阵
- Android 获取ROOT权限原理解析
- linux 图形界面 来龙去脉
- iOS7.1以后企业应用发布需要HTTPS协议,解决步骤(加了五、六步)