Vector 获取某些输入的分段错误(或错误访问),程序停止 #包括 #包括 #包括 使用名称空间std; 无效步长\选择\排序(向量&a、整数大小、整数idx){ 内部i、j、最小值、温度; i=idx; min=i; 对于(j=i+1;ja[j]) min=j; }
获取某些输入的分段错误(或错误访问),程序停止Vector 获取某些输入的分段错误(或错误访问),程序停止 #包括 #包括 #包括 使用名称空间std; 无效步长\选择\排序(向量&a、整数大小、整数idx){ 内部i、j、最小值、温度; i=idx; min=i; 对于(j=i+1;ja[j]) min=j; },vector,segmentation-fault,permutation,access-violation,Vector,Segmentation Fault,Permutation,Access Violation,获取某些输入的分段错误(或错误访问),程序停止 #包括 #包括 #包括 使用名称空间std; 无效步长\选择\排序(向量&a、整数大小、整数idx){ 内部i、j、最小值、温度; i=idx; min=i; 对于(j=i+1;ja[j]) min=j; } 如果(最小!=i) { 温度=a[i]; a[i]=a[min]; a[分钟]=温度; } idx++; } 无效选择\排序(向量&a、整数大小、整数idx){ int i; 对于(i=0;i您是否尝试过使用gdb调试代码?此外,尝试将代码剥
#包括
#包括
#包括
使用名称空间std;
无效步长\选择\排序(向量&a、整数大小、整数idx){
内部i、j、最小值、温度;
i=idx;
min=i;
对于(j=i+1;ja[j])
min=j;
}
如果(最小!=i)
{
温度=a[i];
a[i]=a[min];
a[分钟]=温度;
}
idx++;
}
无效选择\排序(向量&a、整数大小、整数idx){
int i;
对于(i=0;i您是否尝试过使用gdb
调试代码?此外,尝试将代码剥离为最小的可复制示例(如所述),因为它太大,无法立即判断出问题所在。此外,请考虑在问题中添加c++
标记。您在main()中使用了未初始化变量j
)
函数。在声明时尝试初始化它,如下所示:int j=0;
。另一个问题--stoi
函数是什么?它来自哪里?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void step_selection_sort(vector <int> &a, int size, int idx){
int i,j,min,temp;
i = idx;
min = i;
for (j=i+1;j<size;j++)
{
if (a[min]>a[j])
min=j;
}
if (min!=i)
{
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
idx++;
}
void selection_sort(vector <int> &a, int size, int idx){
int i;
for(i=0;i<size;i++)
{
step_selection_sort(a,size,idx);
}
}
void step_desc_sort(vector <int>& a, int size, int idx){
int i,j,max,temp;
i = idx;
max = i;
for (j=i+1;j<size;j++)
{
if (a[max]<a[j])
max=j;
}
if (max!=i)
{
temp = a[i];
a[i] = a[max];
a[max] = temp;
}
idx++;
}
void desc_sort(vector <int>& a, int size, int idx){
int i;
for(i=0;i<size;i++)
{
step_desc_sort(a,size,idx);
}
}
void swap (int & a, int & b)
{
int t = a;
a = b;
b = t;
}
int findCeil (vector <int>& nums, int first, int begin, int end)
{
int ceilIndex = begin;
for (int i = begin+1; i <= end; i++)
if (nums[i] > first && nums[i] < nums[ceilIndex])
ceilIndex = i;
return ceilIndex;
}
int findBottom(vector <int>& nums,int first,int begin,int end)
{
int bottomIndex = begin;
for (int i = begin+1; i <= end; i++)
if (nums[i] < first && nums[i] > nums[bottomIndex])
bottomIndex = i;
return bottomIndex;
}
void sortedPermutations_ASC (vector <int> nums,int num)
{
bool isfinished=false;
if(isfinished==false)
for(int i=0;i<num;i++)
cout << nums[i]; //bad access when giving inputs bigger than 8
cout << endl;
int k;
for ( k = num - 2; k >= 0; --k )
if (nums[k] < nums[k+1])
break;
if ( k == -1 )
isfinished=true;
else
{
int ceilIndex = findCeil( nums, nums[k], k + 1, num - 1 );
swap( nums[k], nums[ceilIndex] );
selection_sort(nums,num,k+1);
sortedPermutations_ASC(nums,num);
}
}
void sortedPermutations_DESC (vector <int> nums,int num)
{
int i;
bool isfinished=false;
if(isfinished==false)
for(i=0;i<num;i++)
cout << nums[i];
cout << endl;
int k;
for ( k = num - 2; k >= 0; --k )
if (nums[k] > nums[k+1])
break;
if ( k == -1 )
isfinished=true;
else
{
int bottomIndex = findBottom( nums, nums[k], k + 1, num - 1 );
swap( nums[k], nums[bottomIndex] );
desc_sort(nums,num,k+1);
sortedPermutations_DESC(nums,num);
}
return;
}
int main(){
vector <int> nums;
string line,temp;
int num,j,k;
getline(cin,line);
while(j<line.size() && line[j]!=' ')
j++;
num=stoi(line.substr(0,j));
string kind;
j++;
kind=line.substr(j);
if(kind=="ASC"){
for(k=0;k<num;k++)
nums.push_back(k+1);
sortedPermutations_ASC(nums,num);
}
if(kind=="DESC"){
for(k=0;k<num;k++)
nums.push_back(num-k);
sortedPermutations_DESC(nums,num);
}
return 0;
}