对于 插入排序的简单讨论

     插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的数据中的适当位置上,直到全部插入完为止。

    插入排序由N - 1 趟(pass)排序组成。对于P = 1趟到P = N趟,插入排序保证从位置0到位置P上的元素为已排序状态。插入排序利用了这样的事实:位置0到位置P - 1上的元素是已排序的。如下图所示:

     https://i-blog.csdnimg.cn/blog_migrate/cc2224631460a15ee2a70f5f73ee9603.png

     在第P趟,我们将位置P上的元素向左移动到它在前P+1个元素中的正确位置上。基于这种思想,写了一个简单的C语言程序来实现该算法。

   附代码:

 #include <QCoreApplication>
 #include <iostream>
 using namespace std;

 void InsrttionSort(int A[],int N){
                                int j,P;
                                int Tmp;
                                for(P = 1;P < N;P++){
                                      Tmp = A[P];
                                      for(j = P;j > 0 && A[ j - 1 ] > Tmp;j--)
                                            A[j] = A[j - 1];
                                            A[j]  = Tmp;
                                 }
                   }

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int A[] = {4,5,1,3,2};
    InsrttionSort(A,5);

    cout<< A[0]<<" ";
    cout<<A[1]<<" ";
    cout<<A[2]<<" ";
    cout<<A[3]<<" ";
    cout<<A[4]<<" "<<endl;
    return a.exec();
}
 输出结果为:1 2 3 4 5

   特点:stable sort、In-place sort
   最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度。
   最差复杂度:当输入数组为倒序时,复杂度为O(n^2)
   插入排序比较适合用于“少量元素的数组”。

   



    













 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值