是什么
将要排序的元素,分为两部分,一部分为有序表,一部分为无序表,每次从无序表中取出一个元素插入到有序表中。刚开始第一个元素我们认为他是有序的,把后面的元素逐个插入到前面的有序队列中;
复杂度
时间:O(n^2)
空间:O(1)
Java Demo
public class InsertSort {
public static void main(String[] args) {
int[] num = {1, 11, 2, 22, 3, 33, 4, 44, 5, 55, 9};
System.out.println(Arrays.toString(num));
int j;
for (int i = 1; i < num.length; i++) {
int temp = num[i];
for (j = i - 1; j >= 0 && num[j] > temp; j--) {
num[j + 1] = num[j];
}
num[j + 1] = temp;
}
System.out.println(Arrays.toString(num));
}
}
优化
public class InsertSort {
public static void main(String[] args) {
int[] num = {1, 11, 2, 22, 3, 33, 4, 44, 5, 55, 9};
System.out.println(Arrays.toString(num));
int j;
for (int i = 1; i < num.length; i++) {
int temp = num[i];
for (j = i - 1; j >= 0 && num[j] > temp; j--) {
num[j + 1] = num[j];
}
// 优化
if (j + 1 != i) {
num[j + 1] = temp;
}
}
System.out.println(Arrays.toString(num));
}
}