冒泡排序程序不输出结果

时间:2014-02-04 04:52:55

标签: c++ arrays sorting bubble-sort

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

#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++;
    }
}

请仅使用基本编程技术,因为这是我的第一个编程类。谢谢。 编辑:修复了关系运算符。但现在我的结果不正确。

2 个答案:

答案 0 :(得分:2)

while (x >! k)

这不符合你的想法。如果您想要“虽然x不大于k”,但您需要<=。由于array1[k]不是您排序的元素之一,因此您可能需要<

while (x < k)

请注意,对于这样的循环存在for

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

至于新的bug,你只需要在冒泡中进行一轮冒泡。您需要另一个for循环。此外,i中永远不会初始化main,而i != 0000也不会检查用户是否输入了4个零。它只会检查用户的输入是否等于数字0

答案 1 :(得分:1)

主要问题在于:

while (x >! k)

在第一次迭代中,条件检查(0 > !k)k是否不为0,因此!k为0,因此条件为false且循环从不执行。尝试使用:

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

您在冒泡排序的排序阶段也遇到问题;你只需要遍历数据一次,这通常不足以对它进行排序。

最后,一些设计问题。

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