剑指offer-堆排序
来源:互联网 发布:淘宝卖家规蜜入口 编辑:程序博客网 时间:2024/05/21 10:26
堆排序,假设需要从小到大排序。利用大顶堆
代码实现:
package sai.HeapSort;/** * 1,堆排序 * * @author WangSai * */public class HeapSort {public static void main(String[] args) {int[] arr = { 1, 2, 5, 3, 6, 9 };mySort(arr);}// 1,构建当前数组的大顶堆// 2,把堆顶数字放到数组的尾部,并且数字长度减少一个// 3,重复2。private static void mySort(int[] arr) {// 异常值检测if (arr == null || arr.length <= 0)return;// 把arr创建为大顶堆buildMaxTopHeap(arr);System.out.println(arr[0]);int high = arr.length - 1;while (high > 0) {// 交换堆顶和堆尾数字swap(arr, 0, high);high--;// 重新调整为大顶堆adjustMaxHeap(arr, high, 0);}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}/** * 数字arr[i]和arr[high]交换 * * @param arr,数组 * @param i,带交换的数字的角标 * @param high,带交换的数字的角标 */private static void swap(int[] arr, int i, int high) {int temp = arr[i];arr[i] = arr[high];arr[high] = temp;}/** * 把当前数组arr[0,high]创建大顶堆 * * @param arr,带排序数组 */private static void buildMaxTopHeap(int[] arr) {int high = arr.length - 1;for (int i = (high - 1) / 2; i >= 0; i--) {adjustMaxHeap(arr, high, i);}}/** * 调整当前节点及其子树为大顶堆 * * @param arr,带排序数组 * @param high,数组的最后一个数字的角标 * @param i,带排序节点 */private static void adjustMaxHeap(int[] arr, int high, int i) {int temp = arr[i];for (int j = 2 * i + 1; j <= high; j = 2 * j + 1) {if (j <= high - 1 && arr[j] < arr[j + 1]) {j++;}if (temp < arr[j]) {arr[i] = arr[j];i = j;} elsebreak;}arr[i] = temp;}}
0 0
- 堆排序-剑指offer
- 剑指offer-堆排序
- 【剑指offer】 堆排序查找最小的K个数
- 二叉堆,堆排序,STL优先队列的底层实现,剑指offer数据流中的中位数
- 【剑指offer】快速排序
- 剑指offer--快速排序
- 剑指offer 快速排序
- 剑指offer 归并排序
- 剑指offer 快速排序
- 剑指offer 快速排序
- 归并排序-剑指offer
- 快速排序-剑指offer
- 剑指offer-排序算法
- 剑指Offer 字符串排序
- 剑指offer- hash排序
- 剑指offer-快速排序
- 剑指offer-归并排序
- 剑指offer-奇偶排序
- Java泛型_自定义泛型类
- BZOJ 4823: [Cqoi2017]老C的方块(最小割)
- 关于jquery的一些小记
- Unity 将相机里看到的 显示到 Image上
- C++复习0.2——运算符重载/继承/多态
- 剑指offer-堆排序
- opencv kmeans
- Redis 启动异常Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
- webpack超详细配置, 使用教程(图文)
- Android Framework学习(十)之向ServiceManager注册Native层服务
- Glide异常:You cannot load start a load for a destory activity
- (六)路由规则
- Jsp的九大对象,七大动作,三大指令
- js自定义事件和jQuery自定义事件