[java]
package com.robert.paixu;
public class InsertSortAlgorithm {
public static void main(String[] args) {
int[] arrays = {4,6,9,2,0,1,-5,10,-20,100,20,15};
insertSort(arrays);
display(arrays);
}
private static void insertSort(int[] arrays) {
for (int i = 0; i < arrays.length; i++) {
int currentIndex = i;
int preIndex = i - 1;
while (currentIndex != 0 && preIndex >= 0) {
if (arrays[currentIndex] < arrays[preIndex]) {
swap(arrays, currentIndex, preIndex);
currentIndex--;
} else break;
preIndex--;
}
}
}
private static void swap(int[] arrays, int i, int j) {
int temp = arrays[i];
arrays[i] = arrays[j];
arrays[j] = temp;
}
private static void display(int[] arrays) {
for (int v : arrays) System.out.print(v + " ");
}
}
O(n)(數組已有序,內層循環立即 break)。O(n²)(數組逆序,每次插入都要移到最前)。O(n²)。O(1),原地排序。O(n log n) 比較,但移動仍 O(n²))。數據量小、近乎有序、要求穩定排序的場合。