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