为什么这个C ++插入排序不起作用?

时间:2016-12-08 06:19:08

标签: c++ sorting

我正在学习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;
}

我还包括头文件和命名空间,但这里没有写。如果您认为我使用了这么多变量,抱歉,我需要它们:)

1 个答案:

答案 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++) {