我是编程新手,请原谅我,如果问题听起来微不足道。你的任何建议对我的学习都有很大的帮助。 我正在编写一个大小为10的数组的Selection_Sorting程序。我能够编译程序但是在给出输入后它反映了这个 信息: 排序数组如下: 中止陷阱:6
我的问题是在该程序中查看问题以解决问题,以及出现此问题的原因是什么?
作为参考,我附上了我的代码。
# include <iostream>
void fill_array(int sample_array[10], int size);
void sort(int sample_array[10], int size);
void swap(int &a1, int &a2);
int index_of_smallest(int array[10], int start_index, int size);
int main()
{
using namespace std;
int array[10];
fill_array(array, 10);
sort(array, 10);
cout << " The sorted array as follows : \n";
for (int i = 0; i < 10; i++)
{
cout << array[i] << " ";
}
return 0;
}
void fill_array(int sample_array[10], int size)
{
using namespace std;
for (int index = 0; index< 10; index++)
{
cin >> sample_array[index];
}
}
void swap(int &a1, int &a2)
{
int temp;
temp = a1;
a1 = a2;
a2 = temp;
}
int index_of_smallest(int array[10], int start_index, int size)
{
int min = array[start_index];
int min_index = start_index;
for (int i = start_index + 1; i< size - 1; i++)
{
if (array[i]< min)
{
min = array[i];
min_index = i;
}
}
return min_index;
}
void sort(int sample_array[10], int size)
{
int next_min_index;
int j;
for (j = 0; j < size; j++)
{
next_min_index = index_of_smallest(sample_array, j, 10);
}
swap(sample_array[j], sample_array[next_min_index]);
}
答案 0 :(得分:1)
我决定破译最有可能出错的一个函数。我在这里重新格式化它是可读的:
void sort( int sample_array[10], int size )
{
int next_min_index;
int j;
for( j = 0; j < size; j++ )
{
next_min_index = index_of_smallest( sample_array, j, 10 );
}
swap( sample_array[j], sample_array[next_min_index] );
}
现在,希望你能看到问题。
交换不在循环内部发生。您将j
的定义移出了循环范围(可能是为了修复您不理解的编译错误,这会引发您的问题)。
交换发生在j == 10
时。这超出了你的数组界限和程序的范围。如果将功能更改为此,则应修复错误:
void sort( int sample_array[10], int size )
{
for( int j = 0; j < size; j++ )
{
int next_min_index = index_of_smallest( sample_array, j, 10 );
swap( sample_array[j], sample_array[next_min_index] );
}
}
这可能不是唯一的问题,但我不会破译其余的代码。希望这个解决方案加上一些强烈的鼓励,使用人类可读的代码布局将帮助您顺利完成。