插入排序

1。基本思想

将n个元素的数列分为已有序和无序两个部分,如插入排序过程示例下所示:

  {{a1},{a2,a3,a4,…,an}}

  {{a1⑴,a2⑴},{a3⑴,a4⑴ …,an⑴}}

  …

  {{a1(n-1),a2(n-1) ,…},{an(n-1)}}

  每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,找出插入位置,将该元素插入到有序数列的合适位置中。

2。举例

        示例:假设给定数组A[1......6]={ 3,5,8,9,1,2 },我们来分析一下A数组进行选择排序的过程

        第一趟:i=1,index=5, a[1] 和 a[5] 进行交换。得到序列:{ 1,5,8,9,3,2 }

        第二趟:i=2,index=6, a[2] 和 a[6] 进行交换。得到序列:{ 1,2,8,9,3,5 }

        第三趟:i=3,index=5, a[3] 和 a[5] 进行交换。得到序列:{ 1,2,3,9,8,5 }

        第四趟:i=4,index=6, a[3] 和 a[5] 进行交换。得到序列:{ 1,2,3,5,8,9 }

        第五趟:i=5,index=5, 不用交换。得到序列:{ 1,2,3,5,8,9 }

       (6-1)趟选择结束,得到有序序列:{ 1,2,3,5,8,9 }

3。代码

void InsertSort() {
        for(int i=1;i<n;i++){
            int temp = a[i];
            int j=i-1;
            while(j>0&&a[j]>temp){
                     a[j+1]=a[j];
                     j--;
            }
            a[j++]=temp;
        }
}
4。复杂度

   最佳效率O(n);最糟效率O(n²)与冒泡、选择相同,适用于排序小列表 若列表基本有序,则插入排序比冒泡、选择更有效率。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值