排序演算法之插入排序
阿新 • • 發佈:2020-10-07
插入排序
將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最後一個元素當成是未排序序列。
從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)
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; }