0
点赞
收藏
分享

微信扫一扫

推排序——好绕啊

伊人幽梦 2022-03-11 阅读 54
//堆排序,0位置放第一个元素,着重理解0位置放不放元素的区别,放的话相当于比较时和交换时索引都要减一
public class Heap {
    private Heap(){}
    public static void sort(Comparable[] a){
        int n = a.length;
        for (int i = n/2; i >= 1; i--){
            sink(a, i, n);
        }
        System.out.println(Arrays.toString(a));
        while (n > 1) {
            exch(a, 1, n--); //注意此处,交换时会减一所以不会越界
            sink(a,1, n);
        }
    }
    private  static void sink(Comparable[] a, int k, int n){
        while (2*k <= n){
            int j = 2*k;
            if (j < n - 1 && less(a, j, j+1)) j++;
            if (less(a, j, k)) break;
            exch(a, j, k);
            k = j;
        }
    }
    private  static boolean less(Comparable[] a, int i, int j){
         return  a[i - 1].compareTo(a[j - 1]) < 0;

    }
    private  static void exch(Object[] a, int i, int j){
        Object temp = a[i - 1];
        a[i - 1] = a[j - 1];
        a[j - 1] = temp;
    }
    public static void main(String[] args) {
        Comparable[] a = new Comparable[]{3,2,6,4,7,5};

        sort(a);
        System.out.println(Arrays.toString(a));
    }
}

举报

相关推荐

0 条评论