Java中三種常用的排序方法

weixin_34082695發表於2016-12-20

今天重新學習類三種排序方法,按照排序速度依次是氣泡排序,選擇排序和插入排序。
以下示例皆為從小到大的排序

1.氣泡排序

每一次比較都可能要交換元素。
氣泡排序的思想是:
每一輪開始的時候,將第一個元素(a)開始與其後的元素(b)依次進行比較,將較大的元素(設為m)放到後面,並將m與其後的另外一個元素繼續進行比較,直到最後一個沒有排好序的元素。
在接下來一輪的排序中,剛才以及之前選出來的、已經排好順序的最大值不用參與排序。
依次類推,總共遍歷n-1輪,即可完成排序。
具體程式碼如下:

 void bubble(int[] arr){
    int temp;
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    
    System.out.println("\n--bubble :");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
}

2.選擇排序

每次比較的時候不交換
選擇排序的思想:
每次比較的時候找到的兩個數中的較大值並記下其位置,等到當前一輪的遍歷完成之後,將最後一個未排序元素與這一輪遍歷找到的最大值交換
最多交換n-1次
程式碼如下:

   void select(int[] arr){

    for (int i = 0; i < arr.length; i++) {
        int maxIndex = 0;
        int temp = 0;
    
        for (int j = 1; j < arr.length - i; j++) {
            if (arr[maxIndex] < arr[j]) {
                maxIndex = j;
            }
        }
        
        temp = arr[maxIndex];
        arr[maxIndex] = arr[arr.length - i - 1];
        arr[arr.length - i - 1] = temp;
    }
    
    
    System.out.println("\n--select :");
    
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
}

3.插入排序法

插入排序法思想:
將待排序的元素分為有序和無序兩種,剛開始排序的時候假設只有第一個元素是有序的,其餘n-1個元素都是無序的;
排序開始的時,將無序部分的一個元素(a)與有序部分的最後一個元素(b)進行比較,如果a<b,則將a與b交換,再將a與下一個有序元素進行比較;否則,將a加到b後面,作為有序部分的最後一個元素。
接著再從無序部分取出一個元素與有序部分的元素依次比較,直達所有元素都為有序元素。
遍歷n-1次
程式碼如下:

    void insertSort(int[] arr){

    for (int i = 1; i < arr.length; i++) {
        int instertValue = arr[i];
        
        for (int j = i - 1; j >= 0; j--) {
            if (instertValue < arr[j]) {
                arr[j+1] = arr[j];
                arr[j] = instertValue;
            }else {
                break;
            }
        }
    }
    
    /* 第二種表示形式
    for (int i = 1; i < arr.length; i++) {
        int instertVal = arr[i];
        int index = i - 1;
        
        while (index >= 0 && instertVal < arr[index]) {
            arr[index + 1] = arr[index];
            index--;
        }
        arr[index + 1] = instertVal;
    }       
    */

    System.out.println("\n--insertSort :");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + " ");
    }
}

相關文章