package com.itheima.demo02.Iterator;
import java.util.Arrays;
/*
插入排序:
外层循环执行数组长度-1次
内层循环从i开始,向前比较,找到当前数应该所在的位置j,将a[i]赋值给a[j]
*/
public class test {
public static void main(String[] args) {
int[] a = new int[10];
for (int i = 0; i < 10; i++) {
a[i] = (int) (Math.random() * 100);
}
// int temp = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j > 0; j--) {
if (a[j] < a[j - 1]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
for (int i = 1; i < a.length; i++) {
int num = a[i];
int j;
for (j = i; j > 0 && num < a[j - 1]; j--) {
a[j] = a[j - 1];
}
a[j] = num;
}
System.out.println(Arrays.toString(a));
}
}
复杂度分析
直接插入排序复杂度如下:
平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 |
---|---|---|---|
O(n²) | O(n²) | O(n²) | O(1) |
比较与总结
插入排序所需的时间取决于输入元素的初始顺序。例如,对一个很大且其中的元素已经有序(或接近有序)的数组进行排序将会比随机顺序的数组或是逆序数组进行排序要快得多。