插入排序:将记录插入到已经排好序的有序链表中,从而得到一个新的记录增1的有序表
最优时间复杂度 O(n), 最坏时间复杂度 O(n2)
/*** @Description: 插入排序:将记录插入到已经排好序的有序链表中,从而得到一个新的记录增1的有序表* 最优时间复杂度 O(n), 最坏时间复杂度 O(n2)* @Author: lizhouwei* @CreateDate: 2018/6/23 9:52* @Modified By:*/public class InsertSort {public static void insertSort(Integer[] arr) {if (arr == null || arr.length == 0) {return;}SortUtil.printArray("插入排序前", arr);Integer temp = 0;int j = 0;for (int i = 1; i < arr.length; i++) {if (arr[i] > arr[i - 1]) {continue;}temp = arr[i];for (j = i - 1; j >= 0 && temp < arr[j]; j--) {arr[j + 1] = arr[j];}arr[j + 1] = temp;}SortUtil.printArray("插入排序后", arr);}}
复杂度分析
时间复杂度:
当最好的情况,也就是要排序的表本身就是有序的,那么每次需要进行需要n-1次比较,总共需要比较次,没有数据交换,时间复杂度为
。
当最坏的情况,即要排序的表是逆序情况,此时需要比较 次,因此时间复杂度为
;
