Программа Bubble Sort не выдает результат
Я нахожусь в дискретном классе математики, и одна из проблем hw - внедрить пузырьковую сортировку. Вот моя тщетная попытка, потому что она не дает решения. Пожалуйста посоветуй. Спасибо.
#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 ответа
Основная проблема здесь:
while (x >! k)
На первой итерации условие проверяет, (0 > !k)
, а также k
не 0, так !k
равно 0, поэтому условие ложно, и цикл никогда не выполняется. Попробуйте использовать:
for (int x = 0; x < k; x++)
cout << array1[x] << "\n";
У вас также есть проблема на этапе сортировки пузырьковой сортировки; Вы только итерируете данные один раз, что недостаточно для их сортировки.
Наконец, некоторые проблемы дизайна.
- У вас должна быть одна функция для сортировки данных и отдельная функция для ее печати. Не объединяйте две функции, как вы сделали здесь.
- Избегайте глобальных переменных. Передайте массив и его рабочую длину в функцию сортировки и в функцию печати, если она у вас есть.
while (x >! k)
Это не делает то, что вы думаете, что делает. Если вы хотите что-то, что говорит "время x
не больше чем k
", ты хочешь <=
, поскольку array1[k]
не один из элементов, которые вы отсортировали, однако, вы, вероятно, хотите <
,
while (x < k)
Обратите внимание, что for
существует для таких циклов:
for (int x = 0; x < k; x++) {
cout << array1[x] << "\n";
}
Что касается новой ошибки, вы делаете только один раунд пузырьков в вашей пузырьковой сортировке. Тебе нужен другой for
петля. Также, i
никогда не инициализируется в main
, а также i != 0000
не собирается проверять, вводил ли пользователь буквально 4 нуля. Он будет только проверять, был ли ввод пользователя равен числу 0
,