插入排序 【InsertionSort】
阿新 • • 發佈:2019-01-28
插入排序
插入排序的工作方式像排序一手撲克牌。 假設左手的牌是排序好的,桌面上的是未知的牌
1. 開始時,我們的左手為空並且桌子上的牌面向下。
2. 然後,我們每次從桌子上拿走一張牌並將它插入左手正確的位置。 為了找到插入的正確位置,我們將要插入的牌與左手的牌挨著比較,直接找到合適的位置並插入進去。
在實際的實現過程中,我們可以將陣列的第0個元素看成是已經排序好的,然後從第二個元素開始進行插入。
演算法實現
public class InsertionSort {
public void insertionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return ;
}
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0 && arr[j] < arr[j-1] ; j--) {
swap(arr, j, j-1);
}
}
}
private void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
時間複雜度
因為每次插入的時候都需要去比較,所以時間複雜度為O(N^2)
穩定性
因為插入的資料是挨著順序進入的,所以排序前後的相對順序是不會改變的。所以是穩定的演算法。