稳定排序之插入排序

插入排序(Insertion Sorting)就是每次都将一个无序的待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

比较顺序是有序部分的从右到左(从大到小)和有序部分比较,

算法描述:

将待排数组L[0..n-1](共n个数)分为两部分,L[0..i]为有序部分,L[i+1..n-1]为未排序部分。

1.i=0.
2.把L[i+1]插入到L[0..i]中的正确位置,i++.
3.if(i<n-1) goto 2.
4.停止

具体算法如下:

template<class Key>
void InsertSort(Key L[], int n){
    int i,j;
    Key temp;
    for(i=1; i<n; i++){
    for(temp=L[i],j=i-1; j>0; j--){
        if(L[j]>temp) L[j=1]=L[j];//后移
        else{
        L[j+1]=temp;break;//插入到有序部分最后
        }
    }
    }
    return;
}

插入排序是稳定排序:选第一个元素为有序序列,后面的元素和它作比较,比它大就在它后面,比它小就和它交换位置,和它相等,就放在它后面。所以插入排序是稳定的。
最好情形,时间复杂度B(n)=n-1=θ(n).
最坏情形,时间复杂度w(n)=n(n-1)/2=θ(n^2).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值