zoukankan      html  css  js  c++  java
  • 排序之 堆排序

    按照算法导论上的实现,不过把下标改成从0开始了。

    原理:

    import java.util.Arrays;
    
    public class Solution {
        /**
         * 每次将堆顶元素交换到最后并从堆中除掉。
         * 
         * @param a
         */
        public static void heapSort(int[] a) {
            buildHeap(a);
            int n = a.length - 1;
            for (int i = a.length - 1; i > 0; i--) {
                swap(a, 0, i);
                // 堆的大小每次减1
                maxHeapify(a, n--, 0);
            }
        }
    
        /**
         * O(n)时间建堆
         */
        private static void buildHeap(int[] a) {
            for (int i = a.length / 2; i >= 0; i--)
                maxHeapify(a, a.length, i);
    
        }
    
        /**
         * n 表示当前堆的大小
         */
        private static void maxHeapify(int[] a, int n, int i) {
            int l = left(i);
            int r = right(i);
            int largest = i;
    
            if (l < n && a[l] > a[i])
                largest = l;
    
            if (r < n && a[r] > a[largest])
                largest = r;
    
            if (largest != i) {
                swap(a, i, largest);
                maxHeapify(a, n, largest);
            }
    
        }
    
        private static void swap(int[] a, int i, int j) {
            int tmp = a[i];
            a[i] = a[j];
            a[j] = tmp;
    
        }
    
        private static int left(int i) {
            return 2 * i + 1;
        }
    
        private static int right(int i) {
            return 2 * i + 2;
        }
    
        public static void main(String[] args) {
            int[] a = { 2, 8, 7, 1, 3, 5, 6, 4 };
            System.out.println("before sorting:" + Arrays.toString(a));
            heapSort(a);
            System.out.println("after sortint:" + Arrays.toString(a));
    
        }
    
    }
  • 相关阅读:
    数据库连接池-配置 wallfilter问题解决-UncategorizedSQLException
    maven统一配置
    maven依赖排除
    list排序
    spring boot日志配置
    HDU 5281 Senior's Gun (贪心)
    Saving HDU (贪心)
    切割木板 (贪心)
    查找最少标记点 (贪心)
    字典序最小问题 (贪心)
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3913571.html
Copyright © 2011-2022 走看看