zoukankan      html  css  js  c++  java
  • 堆排序实现

    1、代码如下

    package better.amy.sort;
    
    /**
     * 堆排序实现
     * 
     * @author zhujinrong
     * 
     */
    public class HeapSort {
    
        /**
         * 构造大堆 大根堆排序的结果是升序
         * 
         * @param a
         *            数组a
         * @param m
         *            起始位置
         * @param n
         *            结束位置
         */
        private static void heapAdjustMax(int a[], int m, int n) {
    
            int t = a[m];
            for (int i = 2 * m + 1; i <= n; i = 2 * i + 1) {
                if (i < n && a[i + 1] > a[i]) {
                    i++;
                }
    
                if (t < a[i]) {
                    a[m] = a[i];
                    m = i;
                }
            }
    
            a[m] = t;
    
        }
    
        /**
         * 升序堆排序
         * 
         * @param a
         *            待排序数组
         */
        public static void heapSortAsc(int a[]) {
            if (a == null) {
                return;
            }
    
            int n = a.length;
            for (int i = n / 2 - 1; i >= 0; i--) {
                heapAdjustMax(a, i, n - 1);
            }
    
            for (int i = n - 1; i > 0; i--) {
                int t = a[i];
                a[i] = a[0];
                a[0] = t;
                heapAdjustMax(a, 0, i - 1);
            }
        }
    
        /**
         * 从下标m,到n,将其调整为小堆 小根堆排序结果是降序(或者说是非升序)
         * 
         * @param a
         *            待排序数组
         * @param m
         *            起始位置
         * @param n
         *            结束位置
         */
        public static void heapAdjustMin(int[] a, int m, int n) {
    
            int t = a[m];
            for (int i = 2 * m + 1; i <= n; i = 2 * i + 1) {
                if (i < n && a[i + 1] < a[i]) {
                    i++;
                }
    
                if (t > a[i]) {
                    a[m] = a[i];
                    m = i;
                }
            }
    
            a[m] = t;
        }
    
        /**
         * 降序堆排序
         * 
         * @param a
         *            待排序数组
         */
        public static void heapSortDesc(int a[]) {
            if (a == null) {
                return;
            }
    
            int n = a.length;
            for (int i = n / 2 - 1; i >= 0; i--) {
                heapAdjustMin(a, i, n - 1);
            }
    
            for (int i = n - 1; i > 0; i--) {
                int t = a[i];
                a[i] = a[0];
                a[0] = t;
                heapAdjustMin(a, 0, i - 1);
            }
        }
    }
    作者:BestNow
    出处:http://www.cnblogs.com/BestNow/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    周五笔记
    python2.0代码重构为3.0一日记
    小白使用Bert跑分类模型
    andrew ng 深度学习 网易云课堂课程
    andrew ng machine learning week9 异常检测和推荐系统
    解决端口占用问题
    postgresqlmysql删除数据表中字段的回车和换行
    echarts常用的属性修改
    后端返回文件流,用blog方式下载 type 值
    antD vue 遇到的一些问题处理
  • 原文地址:https://www.cnblogs.com/tianxue/p/4059138.html
Copyright © 2011-2022 走看看