Java 排序之 堆排序
来源:互联网 发布:关于mac版千牛问题. 编辑:程序博客网 时间:2024/06/03 20:16
堆排序:具有原址性 且 复杂度为O(nlgn)
集中了插入排序和归并排序的优点。
堆 是一个数组,可以看成一个近似的完全二叉树,除了最底层外,该树是完全充满的。而且从左到右从满。
给定一个节点的下标为i,
父节点: i/2
左节点下标
Left(i) = 2 * i;
右节点下标
Right(i) = 2*i +1;
如果下标冲0 开始而不是1开始的话
int left = index * 2+1;
int right = index * 2 + 2;
最大堆:
堆中最大的元素放在跟节点中,该子树包含的所有节点的值都不得大于该子树的根节点的值。
public void heapSort(int[] array){ buildMaxHeap(array); int heapSize = array.length; for(int i = array.length-1;i>0;i--){ swap(array,0,i); heapSize--; maxHeapify(array,heapSize,0); } } public void maxHeapify(int[] array, int heapSize,int index){ int left = index * 2+1; int right = index * 2 + 2; int largest = index; if(left < heapSize && array[left] > array[index]) largest = left; if(right < heapSize && array[right] > array[largest])// largest 而不是 index largest = right; if(largest != index){ swap(array,index,largest); maxHeapify(array, heapSize, largest); } } public void buildMaxHeap(int[] array){ int heapSize = array.length; for(int i = heapSize/2; i >= 0;i--){ maxHeapify(array,heapSize,i); } }
0 0
- Java 排序之 堆排序
- java排序之堆排序
- 堆排序之java
- java之堆排序
- 堆排序之java
- java排序算法之堆排序
- java排序之贰------堆排序代码
- java排序算法之堆排序
- 选择排序之堆排序Java实现
- 排序算法之堆排序Java版
- Java实现排序算法之堆排序
- java实现排序算法之堆排序
- 排序之堆排序java版
- 排序算法之堆排序(Java)
- Java常用排序算法之堆排序
- 排序算法之堆排序java实现
- 排序算法之堆排序 Java 实现
- Java排序算法之堆排序
- quartus时序分析文档自我理解与翻译(开题)
- 用activiti 工作流 实现简单的请假 附带源码
- Foobar ASIO 播放速度异常
- MFC添加图片,声音等资源文件
- 面向对象中类和类的关系
- Java 排序之 堆排序
- OC常用方法,最全.
- 【Android开发-4】进入实践,最喜欢折腾的计算器
- uva 11534 - Say Goodbye to Tic-Tac-Toe(Nim和)
- Blog Tester
- MFC获得主窗口和父窗口指针
- C++ primer(第五版) 练习 6.30 个人 code
- Codeforces Spyke Chatting
- Python图表绘制:matplotlib绘图库入门