【5】用vector进行直接插入排序

Posted on 2019-04-20 21:17  kildallithro  阅读(472)  评论(0编辑  收藏  举报

百分百自己编的程序,越来越觉得编程很好玩了。

但这算是第一次自己用vector这种不是那么无脑的方法编程,只能最多对3个数进行排序wwwww

今天我要回去搬宿舍了,等明天有时间,我一定要把bug找到!

----------------------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------

就在刚刚我debug出来了!

【问题】之前的问题就在于我每一次按从小到大的顺序插入一个数时,由于这个数就在数组中,所以当我插入后整个数组就会多一个数,这个数之后的数就会统统向后移一位。所以我每次输入5个数的时候,就会看到第三个数在第四位上重复了,而后面的数在第6、7位置上,显示不出来,所以也就出现了后面的数显示不出来的情况。

【解决方法】每插入一个数,把这个数之前所在位置上的给删除(erase),问题就解决啦!

#include <iostream>
#include <vector>

using namespace std;

vector<int>a(1000);
void sortt(int p,int q,int m,int k,int num)
{
  if(m<a[p]) {
   a.insert(a.begin()+p,m);
   a.erase(a.begin()+k);//按顺序插入之后,要把原来位置上的a[]给删除掉,才是一个完整的排序过程
  }
  else if(m>a[q]) {
   a.insert(a.begin()+q+1,m);
   a.erase(a.begin()+k);
  }
  else{
   if(q-p==1){
    a.insert(a.begin()+q,m);
    a.erase(a.begin()+k);
    }
   else{
    sortt(p+1,q-1,m,k,num);
   } 
  }
}

int main() { int num; int cnt=1; cin >> num; for(int i=0;i<num;++i) cin >> a[i]; if(a[0]>a[1]) { int temp; temp=a[0]; a[0]=a[1]; a[1]=temp; } for(int i=2;i<num;++i){ sortt(0,cnt,a[i],i+1,num); cnt++; } for(int i=0;i<num;++i) cout << a[i] << " "; return 0; }