我是一个离散的数学课,其中一个问题是实现一个冒泡排序。这是徒劳的尝试,因为它没有输出解决方案。请指教。谢谢。
#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++;
}
}
请仅使用基本编程技术,因为这是我的第一个编程类。谢谢。 编辑:修复了关系运算符。但现在我的结果不正确。
答案 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";
您在冒泡排序的排序阶段也遇到问题;你只需要遍历数据一次,这通常不足以对它进行排序。
最后,一些设计问题。