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

时间:2021-08-14 05:26:35

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

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

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

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

就在刚刚我debug出来了!

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

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

#include <iostream>
#include <vector> using namespace std; vector<int>a();
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=;
cin >> num;
for(int i=;i<num;++i)
cin >> a[i];
if(a[]>a[])
{
int temp;
temp=a[];
a[]=a[];
a[]=temp;
}
for(int i=;i<num;++i){
sortt(,cnt,a[i],i+1,num);
cnt++;
}
for(int i=;i<num;++i)
cout << a[i] << " ";
return ;
}

相关文章