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

    import java.util.Arrays;
    
    public class HeapSort {
    
        public static void main(String[] args) {
            int[] a = { 2, 5, 9, 6, 1, 4, 8, 7, 12, 50 };
            sort(a);
            System.out.println(Arrays.toString(a));
        }
    
        public static void sort(int[] a) {
            int len = a.length;
            for (int i = 0; i < len - 1; i++) {
                // 建堆
                buildHeap(a, len - 1 - i);
                // 交换堆顶元素和最后一个元素
                swap(a, 0, len - 1 - i);
            }
        }
    
        private static void swap(int[] a, int i, int j) {
            // TODO Auto-generated method stub
            int tmp = a[i];
            a[i] = a[j];
            a[j] = tmp;
    
        }
    
        public static void buildHeap(int[] a, int lastIndex) {
            // 从最后一个节点的父节点开始
            for (int i = (lastIndex - 1) / 2; i >= 0; i--) {
                // 当前节点存在子节点
                while (i * 2 + 1 <= lastIndex) {
                    // 左节点下标值
                    int l = i * 2 + 1;
                    // 右结点下标值
                    int r = i * 2 + 2;
    
                    // 默认左节点为最大值
                    int biggerIndex = l;
                    // 存在右结点
                    if (l < lastIndex) {
                        // 右结点的值比左节点大
                        if (a[r] > a[l]) {
                            biggerIndex = r;
                        }
                    }
                    // 当前节点的值比孩子节点的最小值小,交换
                    if (a[i] < a[biggerIndex]) {
                        swap(a, i, biggerIndex);
                        // 把最大值下标赋给当前节点,进入下一次while循环判断
                        i = biggerIndex;
                    } else {
                        break;
                    }
    
                }
    
            }
        }
    
    }
  • 相关阅读:
    Java集合类
    打开Eclipse报错
    FusionWidgets之AngularGauge图
    OLAP 大表和小表并行hash join
    分页SQL模板
    全表扫描分页
    Java中的a++和++a的区别
    JAVA中线程同步方法
    final、finally和finalize的区别
    HashMap和Hashtable的异同点
  • 原文地址:https://www.cnblogs.com/yingpu/p/9266607.html
Copyright © 2011-2022 走看看