我正在学习C ++,这是我第一个对数字列表进行排序的程序之一,我在Kenneth H. Rosen的书中找到了这个算法并用C ++编写。当我在纸上检查它似乎是正确的,但在实践中它有一些错误。例如,我输入3(输入)2(输入)1(输入)4(输入)5(输入)并返回3 1 1 4 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;
}
我还包括头文件和命名空间,但这里没有写。如果您认为我使用了这么多变量,抱歉,我需要它们:)
答案 0 :(得分:-1)
你的索引我应该从第一个元素开始,而不是1。
修复第11行应该完成这项工作:
for (j = 2; j < n; j++) {
i = 0;
while (a[j] > a[i]) {
编辑: 哦,而且,你的变量j应该从第二个元素开始,它是索引1而不是2:
for (j = 1; j < n; j++) {