插入排序
插入排序的工作方式像排序一手撲克牌。 假設左手的牌是排序好的,桌面上的是未知的牌
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)
穩定性
因爲插入的數據是挨着順序進入的,所以排序前後的相對順序是不會改變的。所以是穩定的算法。