插入排序算法的java实现及时间复杂度分析

1 今天在看算法导论的时候被一个插入排序给卡住,于是小结一下。时间复杂度最坏为O(n^2),最好为O(n)。
2 还有一个问题:对于一个长度为n的数组,如果该数组每k个单元分为一组,假设为k1,k2….,其中k2中的元素都大于k1中的元素。那么称该数组为分段有序的。对于该数组,对每个分段进行插入排序后再合并成一个有序数组与对数组整体进行插入排序的时间复杂度是相同的,均为O(kn).
对于此可以这样理解,当对整个数组进行插入排序时,其实进行插入比较的只是本段之内的元素,当插入位置指定到前一段时,会因为不满足条件a[p]>=a[i]而结束该次循环。

package Array_;
public class Insert_Sorted {
    /*
     * O(n^2);
     */
    public static void Insert_Sort(int[] a){
        if(a.length==1){
            System.err.println("The length of Array is 1");
        }
        int temp;
        int p;
        for(int i=1;i<a.length;i++){
            temp=a[i];  //存储带插入元素;
            p=i-1;      //记录当前比较下标;
            while(p>=0&&a[p]>=a[i]){ //将较大元素向后移,腾出一个空位
                a[p+1]=a[p];
                --p;
            }
            a[p]=temp;   //元素插入;    
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值