插入排序(insertion_sort)详解

使用语言:C++

代码如下:

#include<iostream>
using namespace std;
int main()
{
    int  a[6]={31,41,59,26,41,58};
    int len=sizeof(a)/sizeof(a[0]);//获取数组长度的方法
    int key,i,j;
    for(i=1;i<len;i++)
    {
        j=i;
        key=a[j];
        while(a[j-1]>a[j]&&j>0) //由小到大
        {
            a[j]=a[j-1];
            a[j-1]=key;
            j--;
        }
    }

    //此处输出排序后的结果
    for(int i=0;i<len;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}

 

总结:插入排序,就是打牌的时候给扑克牌排序的方式。

 

算法分析:

  1.时间复杂度分析:

     这个算法中,我们可以只关注for循环中的内容。注意到for循环执行n次。

     里面还有个while循环:

      a.最好的情况下,就是序列已经排好,那么while中的判断条件就会一直为true,while部分执行n次。

      b.最坏的情况下,就是待排序的序列完全倒置,while的执行次数就是 [1+2+3+……+(n-1)] ,等差数列求和后是n的二次式。

      以最坏情况为准,插入排序的时间复杂度为O(n*n)

  2.适用情况:少量元素排序时,插入排序很有效。但当数据量增加时,注意时间复杂度是n的2次方,一次导数是2n,二次导数为2>0。所以当n增大时,导数也越来越大,插入排序的时间开销愈发难以令人接受。对于大量数据,如果n的表达式的二次导数小于0则可以考虑。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值