Arrays.sort()的使用和原理

Java的Arrays類中有一個sort()方法,該方法是Arrays類的靜態方法,在需要對數組進行排序時,非常的好用。

jdk中的Arrays.sort()的實現是通過所謂的雙軸快排的算法

1、Arrays.sort(int[] a)

這種形式是對一個數組的所有元素進行排序,並且是按從小到大的順序。

2、Arrays.sort(int[] a, int fromIndex, int toIndex)

這種排序對數組部分進行排序。例如:

int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
    Arrays.sort(a, 0, 3);

表示對數組a的0,1,2進行升序排序(不包含3)

3、public static void sort(T[] a,int fromIndex,int toIndex, Comparator c)

對泛型進行排序。

具體例子:

Person arr[]={
          new Person("迪麗熱巴",18),
          new Person("古力娜扎",21),
          new Person("馬爾扎哈",20)
        };
        Arrays.sort(arr,0,2, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();//標記1
            }
        });

在標記1中若返回值如下:

               返回-1(或負數),表示不需要交換01和02的位置,o1排在o2前面,asc

               返回1(或正數),表示需要交換01和02的位置,o1排在o2後面,desc

也就是說返回的是個正數則需要交換位置(降序)是負數就不需要(升序)

那爲什麼有return o2.a-o1.a就是降序排序

首先o2是第二個元素,o1是第一個元素。無非就以下這些情況:
①: o2.a > o1.a : 那麼此時返回正數,表示需要調整o1,o2的順序,也就是需要把o2放到o1前面,這不就是降序了麼。

②:o2.a < o1.a : 那麼此時返回負數,表示不需要調整,也就是此時o1 比 o2大, 不還是降序麼。

因此就有return o1.a-o2.a就是升序排序

              return o2.a-o1.a就是降序排序

發佈了20 篇原創文章 · 獲贊 4 · 訪問量 4367
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章