插入排序(insertion_sort)详解

来源:互联网 发布:淘宝客是返利网吗 编辑:程序博客网 时间:2024/05/22 05:30

使用语言: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则可以考虑。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子在幼儿园中午不睡觉怎么办 20天婴儿拉稀水怎么办 3个月婴儿拉水怎么办 两岁宝宝拉水怎么办 1岁半宝宝拉水怎么办 5周孩子小鸡长脂肪粒怎么办 小孩丁丁长歪了怎么办 2个月的婴儿咳嗽怎么办 2个月的宝宝干咳怎么办 2月宝宝感冒咳嗽怎么办 产妇肚子上长小疙瘩很痒怎么办 泰迪生下小狗不吃奶怎么办? 刚生的狗不吃奶怎么办 刚出生的小牛不吃奶怎么办 吃奶的狗崽拉稀怎么办 新生儿吃奶老是呛到怎么办 刚生小狗不吃奶怎么办 刚出生的小羊不吃奶怎么办 羔羊走路不稳不吃奶怎么办 新生儿喝奶老是呛到怎么办 宝宝吃母乳呛到怎么办 宝宝一直睡觉不吃奶怎么办 3个月婴儿不吃奶怎么办 新生婴儿晚上不睡觉怎么办 宝宝肚子胀不吃奶怎么办 宝宝25天不睡觉怎么办 50天婴儿不吃奶怎么办 儿子关在房间玩电脑怎么办? 宽带拨号上网账号密码忘了怎么办 双眼皮割的太宽怎么办 营业执照异常名录移除注销怎么办 工商局注册后骚扰电话怎么办 单位工作失误医保断交7年怎么办 大门对大门怎么办?巧用天官赐福 委托书公司名称打错了怎么办 招行ubank不对账怎么办 信贷公司利息高不合理怎么办 衣服上的logo掉怎么办 ui设计师接不到私活怎么办 微信打开很慢怎么办 小泰迪感冒加身上结痂怎么办