直接插入排序

参考资料:
[1]https://www.cnblogs.com/jingmoxukong/p/4303270.html
[2]http://www.cnblogs.com/skywang12345/p/3596881.html

//直接插入排序
#include<iostream>

using namespace std;

void insertSort(int* a,int n )
{
    //思想:
    //分为有序区和无序区
    //刚开始第一个数为有序区的第一个数
    //取出无序区的第一个数,要放入无序区,需要腾出空间
    //如何腾出空间呢

    for(i=1;i<n;i++)
    {
        //刚开始,第一个数肯定位于有序区
        //步骤1:从无序区中取出第一个数
        int tmp = a[i];
        //步骤2:把数插入到有序区中,得在有序区中腾出一个空间
        //有序区是按从小到大进行排序的,比如有序区目前是:1 4 5 7 我要插入的数是6
        //刚开始 6小于7 则把7复制给后面一位
        for(j=i-1;j>=0 && tmp<a[j];j--)//int的范围是从负的很大到正的很大
        {
            a[j+1]=a[j];
        }
        a[j+1]= tmp;
    }
}


int main()
{

    int a[]={20,40,30,10,60,50};
    //数组的长度
    int ilen=sizeof(a)/sizeof(a[0]);
    cout<<"before insert sort"<<endl;
    for(int i=0;i<ilen;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    insertSort(a,ilen);

    cout<<"after insert sort"<<endl;
    for(int i=0;i<ilen;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    return 0;
}

时间复杂度:
直接插入排序的时间复杂度是O(N^2)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。