直接插入排序是將未排序的數據插入至已排好序序列的合適位置。
具體流程如下:
1、首先比較數組的前兩個數據,並排序;
2、比較第三個元素與前兩個排好序的數據,並將第三個元素放入適當的位置;
3、比較第四個元素與前三個排好序的數據,並將第四個元素放入適當的位置;
......
4、直至把最后一個元素放入適當的位置。
假如有初始數據:25 11 45 26 12 78。
1、首先比較25和11的大小,11小,位置互換,第一輪排序后,順序為:[11, 25, 45, 26, 12, 78]。
2、對於第三個數據45,其大於11、25,所以位置不變,順序依舊為:[11, 25, 45, 26, 12, 78]。
3、對於第四個數據26,其大於11、25,小於45,所以將其插入25和45之間,順序為:[11, 25, 26, 45, 12, 78]。
.......
4、最終順序為:[11, 12, 25, 26, 45, 78]。
直接插入排序是穩定的。直接插入排序的平均時間復雜度為O(n2)。
Java 代碼實現如下:(
https://github.com/xbk417/algorithm)
1 public void sort(int[] arr) { 2 int tmp; 3 for(int i = 1; i < arr.length; i++) { 4 // 待插入數據 5 tmp = arr[i]; 6 int j; 7 for(j = i - 1; j >= 0; j--) { 8 // 判斷是否大於tmp,大於則后移一位 9 if(arr[j] > tmp) { 10 arr[j+1] = arr[j]; 11 }else{ 12 break; 13 } 14 } 15 arr[j+1] = tmp; 16 System.out.println(i + ":" + Arrays.toString(arr)); 17 } 18 }