簡體   English   中英

插入從右到左排序

[英]Insertion Sort from Right to Left

我正在嘗試學習Java中的插入排序,但是我遇到了問題。 我按升序學習了插入排序。 現在,我需要按降序排列,但是我必須開始從右到左對數組進行排序。

public class Sorting {

public static void sort(Comparable[] a) {
    int N = a.length;
    for (int i = 1; i < N; i++) {                            
        for (int j = i; j > 0 && less(a[j], a[j - 1]); j--)
            swap(a, j, j - 1);
    }
}

private static void swap(Comparable[] a, int i, int j) { 
    Comparable t = a[i];
    a[i] = a[j];
    a[j] = t;
}

private static boolean less(Comparable v, Comparable w) {                                                   
    return v.compareTo(w) < 0;
}

}

上面的代碼按從左到右的升序(1,2,3,4,..)對數組進行排序。

我需要按降序更改它,但從右到左排序(5,4,3,2 ..)。 我更改了代碼並嘗試了此操作:

    public static void sort(Comparable[] a) { 
    int N = a.length;
    for (int i = N-1; i>=0; i--) { 
        for (int j = i; j >= 1 && less(a[j-1], a[j]); j++)
            swap(a, j, j-1);
    }
}

我多次更改了排序方法,但出現錯誤。

使用相同的算法,只是在檢查,這是較小的,交換參數的方法less ,使得: less(a[j - 1], a[j]) 然后,較小的元素將向右移動。

在這里,我也對其進行了測試,請嘗試:

    public class InsertionSort {
        public static void main(String[] args) {
            Comparable[] a = new Comparable[]{5,6,12,1,3,15,4,0,9};
            sort(a);
            for (int i = 1 ; i < a.length; i++)
                assert a[i].compareTo(a[i-1]) >= 0;
            System.out.println("sort is correct");
        }

        public static void sort(Comparable[] a) { // Sort a[] into         increasing order.
            int N = a.length;
            for (int i = N - 1; i > 0; i--) { // Insert a[i] among         a[i-1], a[i-2],a[i-3]... ..                               
                for (int j = i; j < N && less(a[j - 1], a[j]); j++)
                    exch(a, j, j - 1);
            }
        }

        private static void exch(Comparable[] a, int i, int j) { 
            Comparable t = a[i];
            a[i] = a[j];
            a[j] = t;
        }

                private static boolean less(Comparable v, Comparable w)                 {                                                   
            return v.compareTo(w) < 0;
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM