C++ 用于在c+中对向量进行排序的递归代码+;

C++ 用于在c+中对向量进行排序的递归代码+;,c++,recursion,C++,Recursion,在递归函数(sort)中,最后一个元素被弹出并存储在变量中,然后递归函数对向量的其余部分进行排序,在函数的归纳步骤中,被弹出的元素通过新向量res中的while循环被放入正确的位置。 但是代码中碰巧有一个分段错误,有人能帮我一下吗 #include<iostream> #include <vector> using namespace std; void sort(vector <int> &v){ vector<int> re

在递归函数(sort)中,最后一个元素被弹出并存储在变量中,然后递归函数对向量的其余部分进行排序,在函数的归纳步骤中,被弹出的元素通过新向量res中的while循环被放入正确的位置。 但是代码中碰巧有一个分段错误,有人能帮我一下吗

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

void sort(vector <int> &v){
    vector<int> res;
    if(v.size()==1){
        return ;
    }
      int temp= v[v.size()-1];
      v.pop_back();
      sort(v);
      
      int it=0;
      while(it<=v.size()){
         
        if(temp<v[it]){
            res.insert(it+v.begin(), temp);
            temp=1000000;
        }
        else{
            res.push_back(v[it]);
            it=it+1;
        }
      }
      cout<<res.size();
      return ;
}

int main(){
   
        vector <int> v;
        v.push_back(4);
        v.push_back(0);
        v.push_back(7);
        v.push_back(9);
        sort(v);
    return 0; 
}
#包括
#包括
使用名称空间std;
无效排序(矢量和v){
向量res;
如果(v.size()==1){
返回;
}
int temp=v[v.size()-1];
v、 向后弹出();
排序(v);
int it=0;

虽然(it代码中存在一些问题。最明显的是在res vector inset行中。您希望在it+res.begin()处插入临时值,而不是在it+v.begin()处插入临时值(我假设您希望在res中插入值,因此必须插入临时值的位置参数必须是res而不是v)

如果v中temp之前的值已经被排序了呢?您也需要一个条件来检查它

另外,请记住,在while循环条件下,“it”不能等于v.size()

最后,您将v作为引用传递,并在每次递归调用中弹出它的最后一个元素,因此while循环部分将始终与大小为1的v一起工作(无论在什么操作点)。因此,您必须在最后更新v。我希望您忘记在最后包含语句“v=res”

另外,不需要在末尾返回。函数是void类型。 休息好了

代码如下:

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


void sort(vector <int> & v){
    vector<int> res;
    if(v.size()==1)
    {
        return ;
    }
      int temp= v[v.size()-1];
      v.pop_back();
      sort(v);
      
      int it=0;
      while(it<v.size())
      {
         
        if(temp<v[it])
        {
            res.insert(it+res.begin(), temp);
            temp=1000000;
        }
        else
        {
            res.push_back(v[it]);
            it=it+1;
        }
      }
      
      // If the values before temp are already in sorted order
      if(res.size()==v.size())
      res.push_back(temp);
      
      v=res;
}

int main()
{
   
    vector <int> v;
    v.push_back(4);
    v.push_back(0);
    v.push_back(7);
    v.push_back(9);
    sort(v);
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<" ";
    return 0; 
}
#包括
#包括
使用名称空间std;
无效排序(矢量和v){
向量res;
如果(v.size()==1)
{
返回;
}
int temp=v[v.size()-1];
v、 向后弹出();
排序(v);
int it=0;

你有没有用笔和纸来模拟这个很小的例子?这个