插入排序 C++实现

写给自己!!
插入排序算法,其如同打牌,手里总是已经排好续的牌,而桌面上的是未知牌,其思想是:拿起一张牌,与手中的牌从右到左(从大到小)进行比较,找到合适的位置插入即可。插入排序算法没有合并排序算好效率高,他随着输入的增大而增大。
代码思想:对于将要插入的第j个元素,与已经排序好的0…j-1个元素从j-1处开始比较,如果j-1比j的元素大,则将j-1处的元素往后移一个位置,依次比较,找到j的元素合适的位置,插入即可。代码如下:

    void Insert::InsertSort(vector<int>& coll)
{
    int count = coll.size();
     for(int j=1;j<count;j++)
     {
          int key = coll[j];
          int i=j-1;
          while(i>=0 && coll[i]>key)
          {
               coll[i+1]=coll[i];
               i--;
          }
          coll[i+1]=key;
     }
     for(auto pos=coll.begin();pos!=coll.end();++pos)
     {
         cout<<*pos<<' ';
     }       
}

coll为待排序,插入排序是一种原地排序算法。先把第j个元素取出来给一个临时变量,这样一直向后移的时候就会出现一个空位置,例如把j-1的元素移到j处,就空了一个j-1的位置,其实实际上是有值的,此时coll[j-1]=coll[j],若此时while条件不成立时,把key赋值给coll[j-1]即可。
这里是两层循环,外层循环是对待排序的数组的每一个元素进行遍历,内层循环是对已经排序好的元素中找到即将要插入的元素的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值