插入排序:
时间复杂度:
最坏的情况(每次插入都遍历一遍已经排好序的数组):
外层循环n-1次,内层循环1+2+3+…+(n-2)=(n-2)(n-1)/2次
所以最坏情况是O(n^2)
按照代码,最好的情况(已经有序):O(n)
平均情况为:(n^2 + n)/2,因为二次函数比一元一次函数增长快,
所以为插入排序算法的时间复杂度为O(n^2)
简介:
基本思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
代码:
public class insertSort {
public static void main(String[] args) {
int[] arr = {101,34,119,23};
System.out.println("排序前的数组为:");
System.out.println(Arrays.toString(arr));
insertSort(arr);
System.out.println("排序后的数组为:");
System.out.println(Arrays.toString(arr));
}
public static void insertSort(int[] arr){
for (int i = 1; i < arr.length; i++) {
int index = i;
while (index > 0) {
if (arr[index] < arr[index-1]){ //当前需要的插入元素比前一个要小,则往前面插入
int temp;
temp = arr[index];
arr[index] = arr[index-1];
arr[index-1] = temp;
index--;
} else break;
}
}
}
}