直接插入排序
直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。
Java实现
public static void insertSort(int[] array){
for (int i = 1; i < array.length; i++) {
for (int j = i ; j > 0; j--) {
if( array[j] < array[j-1] ){
int temp = array[j];
array[j] = array[j -1];
array[j -1] = temp;
}
}
//输出每一趟的结果
System.out.print("第" + i+ "趟:");
display(array);
}
}
public static void main(String[] args) {
int[] a = new int[]{5, 7, 9, 8, 6, 3, 4, 2, 1};
insertSort(a);
System.out.print("排序后:");
display(a);
}
运行结果
第1趟:5 7 9 8 6 3 4 2 1
第2趟:5 7 9 8 6 3 4 2 1
第3趟:5 7 8 9 6 3 4 2 1
第4趟:5 6 7 8 9 3 4 2 1
第5趟:3 5 6 7 8 9 4 2 1
第6趟:3 4 5 6 7 8 9 2 1
第7趟:2 3 4 5 6 7 8 9 1
第8趟:1 2 3 4 5 6 7 8 9
排序后:1 2 3 4 5 6 7 8 9
算法特点
-
直接插入排序算法是稳定的排序算法
-
时间复杂度O(n2)
最好情况下,序列已经是升序排列了,需要进行的比较操作为(n-1)次。最坏情况下,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。综上,插入排序算法的时间复杂度为O(n2)
-
空间复杂度O(1)