參考文章:
https://www.cnblogs.com/guoyaohua/p/8600214.html 十大經典排序算法最強總結(含JAVA代碼實現)
https://blog.csdn.net/hellozhxy/article/details/79911867 十大經典排序算法最強總結
https://blog.csdn.net/liupeifeng3514/article/details/83302599
插入排序分析:
平均時間複雜度 | 最好情況 | 最壞情況 | 空間複雜度 | 排序方式 | 穩定性 |
O(n^2) | O(n) | O(n^2) | O(1) | In-place | 穩定 |
插入排序的原理:
插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用 in-place(原狀) 排序(即只需用到 O(1) 的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,爲最新元素提供插入空間。
原理圖:(引用自參考文章)
Java 代碼實現:
public static int[] insertionSort(int[] array){
if(array.length == 0)
return array;
for(int i=0; i<array.length-1; i++){
int current = array[i+1];
int preIndex = i;
while(preIndex >=0 && current < array[preIndex]){
array[preIndex+1] = array[preIndex];
preIndex--;
}
array[preIndex+1] = current;
}
return array;
}
插入排序測試: