我正在学习C++,这是我第一个要对数字列表排序的程序之一,我在肯尼思·H·罗森的书中找到了这个算法,并用C++写了它。当我在纸上检查它时,它似乎是正确的,但在实践中它有一些错误。例如,我输入3( enter )2(enter)1(enter)4(enter)5(enter),它返回3114.5作为答案。我不知道是什么问题,请帮帮忙。
int main()
{
int i, j, s, n, k, a[50];
cout << "Enter number of numbers:\n";
cin >> n;
cout << "Enter the numbers:\n";
for (i = 0; i < n; i++) {
cin >> a[i];
}
for (j = 2; j < n; j++) {
i = 1;
while (a[j] > a[i]) {
i = i + 1; // Here we find the proper place to(if needed) directly insert our number into the sorted part.
}
s = a[j];
for (k = 0; k < j - i - 1; k++) {
a[j - k] = a[j - k - 1];
}
a[i] = s;
}
for (i = 0; i < n; i++) {
cout << a[i] << " ";
}
_getch();
return 0;
}我还包括了头文件和命名空间,但不是在这里编写的。如果您认为我使用了这么多变量,很抱歉,我需要它们:)
发布于 2016-12-08 06:26:21
您的索引I应该从第一个元素开始,它是0而不是1。
修复第11行应完成以下工作:
for (j = 2; j < n; j++) {
i = 0;
while (a[j] > a[i]) {编辑:哦,还有,变量j应该从第二个元素开始,它是索引1,而不是2:
for (j = 1; j < n; j++) {https://stackoverflow.com/questions/41033008
复制相似问题