算法导论第六章(堆排序)
来源:互联网 发布:商业化软件验收 编辑:程序博客网 时间:2024/06/02 04:34
维护堆的性质(MAX-HEAPIFY):
每一步从A[i],A[LEFT(i)],A[RIGHT(i)]中选出最大的。如果A[i]是最大的,程序结束。如果不是,则A[i]和最大的那一个交换。以原来最大的节点为根的字数又可能违反最大堆的性质,因此,对该子树递归调用MAX-HEAPIFY。
package chapter6_sort;public class HeapSort {public static void main(String[] args) {int[] arr = new int[6];for (int i = 1; i < 6; i++) {arr[i] = (int) (Math.random() * 100);}int heapSize = arr.length - 1;// 5buildMaxHeap(arr, heapSize);for (int i = heapSize; i > 1; i--) {int temp = arr[1];arr[1] = arr[i];arr[i] = temp;heapSize = heapSize - 1;maxHeapify(arr, 1, heapSize);}for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}private static void maxHeapify(int[] arr, int i, int heapSize) {int l = i * 2;int r = i * 2 + 1;int largest;if (arr[l] > arr[i] && l <= heapSize) {largest = l;} else {largest = i;}if (arr[r] > arr[largest] && r <= heapSize) {largest = r;}if (largest != i) {int t = arr[i];arr[i] = arr[largest];arr[largest] = t;if (largest < (int) Math.floor(heapSize / 2) + 1) {maxHeapify(arr, largest, heapSize);}}}private static void buildMaxHeap(int[] arr, int heapSize) {for (int i = (int) Math.floor(heapSize / 2); i > 0; i--) {maxHeapify(arr, i, heapSize);}}}
阅读全文
0 0
- 堆排序(算法导论第六章)
- 算法导论第六章(堆排序)
- 算法导论: 第六章 堆排序算法
- 算法导论读书笔记 第六章 堆排序
- 算法导论第六章:堆排序
- 算法导论第六章 堆排序总结
- 算法导论第六章 堆排序
- 算法导论 第六章 堆排序
- 【算法导论】第六章之堆排序
- 算法导论第六章 堆排序
- [算法导论]第六章《堆排序》
- 算法导论第六章堆排序思考题
- 算法导论第六章 堆排序
- 算法导论 第六章 堆排序
- 算法导论第六章-堆排序
- 算法导论--第六章--堆排序
- 算法导论第六章总结:堆排序
- 算法导论 第六章:堆排序
- mac 安装多php 自由切换
- javax.validation结合spring最佳实践
- Android多线程编程之newSingleThreadExecutor
- Java
- ios 跳到appstore 更新或评分
- 算法导论第六章(堆排序)
- vim文字居中,小黑屋模式
- 浏览器同源策略及其规避方法
- FZU 2243
- Okhttp post 发送空的body
- Docker简介
- 分布式服务:spring mvc +mybatis + Dubbo+Zookeeper+Proxy+Restful
- jQuery LigerUI使用教程入门篇
- 1054. 求平均值 (20)