/*
插入排序
/
- 直接插入排序
(1).排序方式:
依次将待排序的数据元素插入到前面的有序序列,使该序列有序,当插入完最后一个元素后,排序完成
import java.util.Arrays;
/**
-
插入排序
-
依次将待排序的数据元素插入到前面的有序序列,使该序列有序,最终插入完最后一个元素后,排序完成
*/
public class InsertSort {
public static void main(String[] args) {
int[] data = new int[] {9, -16, 29, 23, -30, -49, 21, 30, 13};
System.out.println(Arrays.toString(data));
insertSort(data);
System.out.println(Arrays.toString(data));
}
public static void insertSort(int[] data) {
for(int i=1;i<data.length;i++) {
int temp = data[i];
if(data[i] < data[i-1]) {
int j = i-1;
for(;j>=0 && data[j]>temp;j--) {
data[j+1] = data[j];
}
data[j+1] = temp;
}
System.out.println("第"+i+"次排序后数组是:"+Arrays.toString(data));
}
}
}
(3)时间复杂度:
设共有n个元素,由于直接插入排序有两层循环,外层循环了n-1次,内层循环最坏分别循环1次、2次、3次…… (n-1)次,所以时间复杂度是:
(n-1) + 2*(n-1) + 3*(n-1) + …… (n-1)*(n-1),故时间复杂度是:O(n2)