【问题标题】:Unknown issue in a sorting algorithm code排序算法代码中的未知问题
【发布时间】:2014-09-27 06:11:22
【问题描述】:

我是初学者。这听起来可能很愚蠢,因为它是一个简单的算法。下面的程序编译成功,但是当我运行它时,它不会打印排序后的数组。代码在排序算法之前工作正常。然后它不打印排序后的数组。我究竟做错了什么?代码:

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    int n, i, k = -1;
    cout << "Enter the number of elements: ";
    cin >> n;

    int arr[n];
    cout << "Enter the elements to be sorted: ";
    for (i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    cout << "The unsorted array: \n";

    for(i = 0; i < n; i++)
    {
        cout << arr[i] << ' ';
    }
    cout << endl;
    //BubbleSort.

    for(int e = n-1; e > 0; --e)
    {
        for (i = 0; i > e; ++i)
        {
            if (arr[i] > arr[i + 1]) {
                arr[i] = k;
                arr[i] = arr[i + 1];
                arr[i + 1] = k;
            }
        }
    }

    cout << "The sorted list: ";

    for (int x = 0; x > n; ++x)
    {
        cout << arr[x] << ' ';
    }

    system("pause");
    return 0;
}

【问题讨论】:

  • 初学者不是不调试自己程序的借口
  • 正如@Matt 所说,您需要学习如何调试程序。首先打印变量和检查点。如果您想更深入,请查看调试教程。
  • 好的,好的!!!对于所有对我的第一句话有疑问的人。对不起。而且我一定会学会调试代码:p。有什么好看的教程吗? :D

标签: c++ algorithm bubble-sort


【解决方案1】:

建议重读一篇关于C++和一般编程的教程,有些错误是基本的:

  • 比较运算符
  • 作业

有问题的代码:

for (int e = n - 1; e > 0; --e) {
    for (i = 0; i < e; ++i) { // << change here, i > e   ->   i < e you are incrementing
        if (arr[i] > arr[i + 1]) {
            k = arr[i];            // change here, you save in a tmp variable to swap values
            arr[i] = arr[i + 1];
            arr[i + 1] = k;
        }
    }
}

cout << "The sorted list: ";

for (int x = 0; x < n; ++x) { // change here x > n    ->    x < n      same as before.
    cout << arr[x] << ' ';
}

【讨论】:

    【解决方案2】:

    “初学者” 错误不是真的吗?

    最好使用std::cout 或调试器来查明错误/缺陷

    注意比较和分配

    • arr[i] = k; 应该是k = arr[i] ;

    • for (i = 0; i &gt; e; ++i) 应该是for (i = 0; i &lt; e; ++i)

    • for (int x = 0; x &gt; n; ++x) 应该是 for (int x = 0; x &lt; n; ++x)

    【讨论】:

    • 感谢您的快速回复!但是,我按照您的建议修改了代码,但现在它只按原样打印数组,而不是对其进行排序。 O.O
    • 你可能不应该鼓励人们使用 SO 作为调试工具。
    • @EdwardMckinzie 确保您了解如何查找这些错误。
    • 你绝对不应该。这类问题对未来的访问者没有用处。
    • @KarolyHorvath @ Keyser 对不起,我已经有一段时间没有回复帖子了,我有时会忘记社区规则。
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2019-01-23
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多