【发布时间】:2020-12-05 15:20:33
【问题描述】:
我最近一直在使用递归,并尝试使用相同的方法对数组进行排序,尽管使用递归来理解它。
我已经在这里声明了所有必要的功能
#include<iostream>
#include<stdlib.h>
#include<vector>
void insert(std::vector<int>&,int);
void sort(std::vector<int>&);
void getArray(std::vector<int>&, int, char **);
void display(const std::vector<int>&);
这是我的主要功能
int main(int argc, char **argv){
std::vector<int> array;
getArray(array,argc,argv);
sort(array);
display(array);
return 0;
}
这是我的排序恢复函数。
void sort(std::vector<int>& array){
if(array.size()==1)
return;
std::cout<<array.at(array.size()-1);
int temp = array.at(array.size()-1);
std::cout<<temp;
array.pop_back();
sort(array);
insert(array,temp);
}
插入函数
void insert(std::vector<int>& array,int temp)
{
if ((array.size()==0)||array.at(array.size()-1)<=temp)
array.push_back(temp);
int value = array.at(array.size()-1);
array.pop_back();
insert(array,temp);
array.push_back(value);
}
输入数组函数
void getArray(std::vector<int>& array, int argc, char **argv){
for (int i = 1;i<argc;i++){
array.push_back(atoi(argv[i]));
}
}
打印数组函数
void display(const std::vector<int>& array){
for (auto i : array){
std::cout<<i<<std::endl;
}
}
基本上,我使用弹出数组的最后一个元素的逻辑进行递归排序,并使用插入和排序函数在排序结束后添加弹出的元素。
但是运行时出现分段错误
$ g++ -std=c++14 -o main main.cpp
$ ./main 0 7 2 5 1 9
output : Segmentation fault (core dumped)
如果我输入
$ ./main 5
output : 5
即对于单个输入,我返回基本情况,但对于数组则没有。
【问题讨论】:
-
如果您在调试器中运行程序(例如,在 shell 中“gdb --args ./main 0 7 2 5 1 9”,然后在 gdb 中“运行”),您可以检查停止时的堆栈跟踪(gdb 中的“bt”)。这会告诉你问题出在哪里。
标签: c++ arrays sorting recursion c++14