1. 程式人生 > 實用技巧 >排序演算法之插入排序

排序演算法之插入排序

參考:https://www.runoob.com/w3cnote_genre/algorithm

插入排序

將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最後一個元素當成是未排序序列。
從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)

1、宣告一個迴圈變數i,初始值為1,小於陣列長度
2、宣告一個臨時變數tmp,賦值為陣列下標為i的元素
3、建立一個迴圈變數j,初始值為i
4、判斷條件:j>0且tmp小於陣列下標為j-1的元素,如果不滿足則跳過第五步
5、對陣列下標為j賦值為下標為j-1,並對j減一
6、如果j不等於i,將陣列下標為j賦值為tmp

public int[] sort(int[] sourceArray) throws Exception {
    // 對 arr 進行拷貝,不改變引數內容
    int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
    // 從下標為1的元素開始選擇合適的位置插入,因為下標為0的只有一個元素,預設是有序的
    for (int i = 1; i < arr.length; i++) {
        // 記錄要插入的資料
        int tmp = arr[i];
        // 從已經排序的序列最右邊的開始比較,找到比其小的數
        int j = i;
        while (j > 0 && tmp < arr[j - 1]) {
            arr[j] = arr[j - 1];
            j--;
        }
        // 存在比其小的數,插入
        if (j != i) {
            arr[j] = tmp;
        }
    }
    return arr;
}