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));
    
        }
    
    }
  • 相关阅读:
    Quick Sort 快速排序的原理及实现
    IAR_FOR_STM8开发之DEMO的建立
    跨域或者Internet访问Remoting[Remoting FAQ]
    2020 7 22 每日总结
    2020 7 23 每日总结
    2020 7 27 每日总结
    2020 7 20 每日总结
    2020 7 29 每日总结
    2020 7 21 每日总结
    2020 7 28 每日总结
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3913571.html
Copyright © 2011-2022 走看看