插入排序 。。。。

这篇博客详细分析了插入排序算法在不同情况下的时间复杂度。在最坏的情况下,当每次插入都需要遍历已排序的数组时,时间复杂度为O(n^2);而当输入数组已经有序时,最佳情况下的时间复杂度为O(n)。平均情况下,时间复杂度为O(n^2)。插入排序是一种稳定的排序算法,适用于小规模或部分有序的数据。

按照代码,最坏的情况(每次插入都遍历一遍已经排好序的数组):
外层循环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;
        }
    }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值