【问题标题】:Bubble Sort program does not output result冒泡排序程序不输出结果
【发布时间】:2014-02-04 04:52:55
【问题描述】:

我在上离散数学课,其中一个硬件问题是实现冒泡排序。这是我徒劳的尝试,因为它不输出解决方案。请指教。谢谢。

#include <iostream>
#include <cstdlib>
using namespace std;
void BubbleSort();
int array1[100] = {0};
int k;
int main()
{
    cout << "Enter your numbers and when you are done, enter 0000:\n";
    int x = 0;
    int i;
    while (i != 0000)
    {
        cin >> i;
        array1[x] = i;
        x++;
        k = x;
    }
    BubbleSort();
    system("pause");
    return 0;

}

void BubbleSort(){
    int temp;
    for( int i = 0; i < k; i++ ){
        if ( array1[i] > array1[i+1]){
            temp = array1[i+1];
            array1[i+1] = array1[i];
            array1[i] = temp;
        }
    }
    int x = 0;
    while (x <= k)
    {
        cout << array1[x] << "\n";
        x++;
    }
}

请只使用基本的编程技巧,因为这是我的第一堂编程课。谢谢你。 编辑:修复了关系运算符。但现在我得到了不正确的结果。

【问题讨论】:

  • i 未初始化,因此它甚至可能永远不会进入您的循环进行输入。在不知道实际错误是什么的情况下,很难提供任何帮助。
  • 您无法在线性时间内完成冒泡排序。你需要一个嵌套循环。并请显式将 'i' 初始化为非零值。

标签: c++ arrays sorting bubble-sort


【解决方案1】:
while (x >! k)

这并不像你认为的那样。如果你想要“虽然x 不大于k”的东西,你想要&lt;=。不过,由于array1[k] 不是您排序的元素之一,您可能需要&lt;

while (x < k)

注意for 存在于这样的循环中:

for (int x = 0; x < k; x++) {
    cout << array1[x] << "\n";
}

至于新错误,您只在冒泡排序中进行了一轮冒泡。您需要另一个 for 循环。此外,i 从未在 main 中初始化,i != 0000 不会检查用户是否真的输入了 4 个零。它只会检查用户的输入是否等于数字0

【讨论】:

  • 能否请您给我一些其他有效的检查值?谢谢。
  • @user3088723:您需要将用户的输入作为字符串读取,将其与字符串"0000" 进行比较,如果不是"0000",则将其转换为整数。
【解决方案2】:

主要问题在这里:

while (x >! k)

第一次迭代时,条件检查(0 &gt; !k)k是否不为0,所以!k为0,所以条件为假,循环永远不会执行。尝试使用:

for (int x = 0; x < k; x++)
    cout << array1[x] << "\n";

您在冒泡排序的排序阶段也有问题;通常,您只对数据进行一次迭代,这不足以对其进行排序。

最后,一些设计问题。

  1. 您应该有一个函数来排序数据和一个单独的函数来打印它。不要像您在此处所做的那样将这两个功能结合起来。
  2. 避免使用全局变量。将数组及其操作长度传递给排序函数,如果有的话,传递给打印函数。

【讨论】:

  • 谢谢。我不认为我必须多次排序。但现在我明白了!
猜你喜欢
  • 2016-02-18
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2016-01-19
  • 2021-06-05
  • 2012-02-21
  • 1970-01-01
  • 2019-04-21
相关资源
最近更新 更多