排序算法——堆排序(java语言描述)
来源:互联网 发布:毛概论文 网络舆论 编辑:程序博客网 时间:2024/06/04 18:26
public class HeapSort { private static int heapSize;//记录当前堆大小 public static void main(String[] args) { HeapSort heapSort = new HeapSort(); int[] array = {4,1,3,2,16,9,10,14,8,7}; heapSort.doHeapSort(array); for(int i = 0; i < array.length; i++){ System.out.print(array[i] + " "); } } /*堆排序:堆中索引最大的结点n的数值与堆根节点的数值交换,并从堆中去除n节点,此时堆的根节点违背最大堆的性质,因此对其执行maxHeapify方法。循环执行该操作,最终会得到有序数组*/ private void doHeapSort(int[] array) { buildMaxHeap(array); for(int i = array.length - 1; i > 0; i--) { exchange(array, 0, i); heapSize--; maxHeapify(array, 0); } } /*建堆(最大堆):通过自底向上的方式让每一个非叶子节点执行maxHeapify方法将数组构建为最大堆。*/ private void buildMaxHeap(int array[]) { heapSize = array.length; for(int i = array.length/2 - 1; i >= 0; i--) { maxHeapify(array, i); } } /*堆维护:传入数组array以及一个下标i,若array[i]小于其孩子结点,不满足最大堆的性质,则通过使array[i]在最大堆中逐级下降来重新遵循最大堆的性质。*/ private void maxHeapify(int[] array, int index) { int leftIndex = leftNode(index); int rightIndex = rightNode(index); int largest = index; if(leftIndex < heapSize && array[leftIndex] >= array[index]) { largest = leftIndex; } if(rightIndex < heapSize && array[rightIndex] >= array[largest]) { largest = rightIndex; } if(largest != index) { exchange(array, index, largest); maxHeapify(array, largest); } } //交换节点数据 private void exchange(int[] array, int i, int j) { array[i] ^= array[j]; array[j] ^= array[i]; array[i] ^= array[j]; } //得到左孩子下标 private int leftNode(int index) { return index*2 + 1; } //得到右孩子下标 private int rightNode(int index) { return index*2 + 2; }}
阅读全文
0 0
- 排序算法——堆排序(java语言描述)
- 数据结构与算法分析(Java语言描述)(13)—— 原地堆排序
- 数据结构与算法分析(Java语言描述)(12)—— 堆排序与数组建堆
- 堆排序(Java语言描述)
- 排序算法c语言描述---堆排序
- 堆排序java语言描述
- 17、排序算法c语言描述---堆排序
- Java排序算法——堆排序
- 排序算法之堆排序--Java语言
- 【算法拾遗(java描述)】--- 选择排序(直接选择排序、堆排序)
- 《排序算法》——堆排序(大顶堆,小顶堆,Java)
- 算法学习(Java语言描述) -- 冒泡排序算法
- 数据结构与算法分析(Java语言描述)(8)—— (随机)快速排序
- 数据结构与算法分析(Java语言描述)(9)—— (双轴)快速排序
- 数据结构与算法分析(Java语言描述)(1)—— 选择排序
- 数据结构与算法分析(Java语言描述)(2)—— 插入排序
- 数据结构与算法分析(Java语言描述)(3)—— 冒泡排序
- 数据结构与算法分析(Java语言描述)(4)—— 希尔排序
- Linux环境g++编译GDAL动态库
- Java中出现No enclosing instance of type XXX is accessible问题
- C语言 常量、变量
- Hex文件转Bin文件
- POJ 1234 Ball Toss 笔记 未完成
- 排序算法——堆排序(java语言描述)
- 跨域与同源策略
- R语言实战第十三章
- ALSA codec_name 命名规则
- 双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等
- mac如何清空Recent Places
- Lua的线程和状态
- mybatis中mapper进行if条件判断
- 2-3查找树的插入与删除