按照代码,最坏的情况(每次插入都遍历一遍已经排好序的数组):
外层循环n-1次,内层循环1+2+3+…+(n-2)=(n-2)(n-1)/2次
所以最坏情况是O(n^2)
按照代码,最好的情况(已经有序):O(n)
平均情况为:(n^2 + n)/2,因为二次函数比一元一次函数增长快,
所以为插入排序算法的时间复杂度为O(n^2)
稳定的排序算法
public class InsertSort {
public static void insertSort(int[] array) {
//认为第一个数据是有序的 从无序的数据开始 所以i==1 每次多出来一个有序的 所以 每次 i+1;
for (int i = 1; i <array.length ; i++) {
//记录下来这个无序的数据 最后放在合适的位置
int tmp = array[i];
//从有序的数据开始 向前找 有没有比这个tmp大的数据
int j =i-1;
for ( ;j >= 0 ; j--) {
//如果有比 tmp大的数据 那么这个数据就放到它的下一位
if (array[j] > tmp){
array[j+1] = array[j];
//如果找到了比tmp小的就退出循环 把tmp给比它小的数据的下一位
}else {
break;
}
}
//如果找到了比tmp小的就退出循环 把tmp给比它小的数据的下一位 或者循环走完了 把tmp放到第0位
array[j+1] = tmp;
}
}
这篇博客详细分析了插入排序算法在不同情况下的时间复杂度。在最坏的情况下,当每次插入都需要遍历已排序的数组时,时间复杂度为O(n^2);而当输入数组已经有序时,最佳情况下的时间复杂度为O(n)。平均情况下,时间复杂度为O(n^2)。插入排序是一种稳定的排序算法,适用于小规模或部分有序的数据。
1213

被折叠的 条评论
为什么被折叠?



