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


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

    但这算是第一次自己用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; }
  • 相关阅读:
    WLAN 802.11 a/b/g PHY Specification and EDVT Measurement III
    L233
    L232 No methane on Mars
    leetcode 38 Count and Say ---java
    海量字符串查找——bloom filter,c
    leetcode 37 Sudoku Solver java
    mount --bind使用方法
    ECS API
    Linux挂载磁盘
    ECS简述
  • 原文地址:https://www.cnblogs.com/hl220284/p/10742787.html
Copyright © 2020-2023  润新知