【圖解演算法】排序演算法——插入排序
阿新 • • 發佈:2019-02-11
插入排序(insertion sorting)
大體含義是這樣的,想我們在打撲克牌理牌時的思路一樣,來一張撲克牌做一次插入操作。
下面我們給出普通版和優化版的插入排序
public int [] insertionSort(int [] arr){
for (int i = 1; i<arr.length;i++){
for (int j = i; j>0 && arr[j] < arr[j-1];j--){
int temp = arr[j];//迴圈比較兩個相鄰的值,滿足排序條件做交換,不滿足跳出當前這層迴圈
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
return arr;
}
public int [] insertionSortPlus(int [] arr){
for (int i = 1; i<arr.length;i++){
int x = arr[i]; //記錄當前抽的數
int j; //記錄數的位置
for (j = i; j>0 && arr[j-1] >x;j--){
arr[j] = arr[j-1];//挪位置
}
arr[j] = x; //最後處理當前抽的數的位置歸宿 需要注意的是這裡的 j 是上面 for 迴圈退出時的值
}
return arr;
}
優化版的演算法主要在於交換的次數上的優化,在陣列本身的順序較為良好的情況下,這種插入排序的優勢可以體現出來,因為不用向冒泡或是選擇排序那樣必須走完內層迴圈,找到一個合適的時機可以提前跳出內層迴圈。