现有一组数组 arr = [5, 6, 3, 1, 8, 7, 2, 4],共有八个记录,排序过程如下:
其核心思想是: 外层循环选择一个元素, 插入前面已经排序好的序列中
JAVA实现:
//时间复杂度:最好情形O(n),平均情形O(n^2),最差情形O(n^2)
//空间复杂度:O(1)
//稳定性:稳定
//每一步选择一个对象, 插入到前面已经排序好的序列中
public class InsertionSort {
public static void main(String[] args) {
int[] arr = { 6, 5, 3, 1, 8, 7, 2, 4 };
insertionSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void insertionSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int j = i - 1;
int key = arr[i];
// 如果大于key就往后移
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
// 插入key到正确的位置
arr[j + 1] = key;
}
}
}