Программа 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";

У вас также есть проблема на этапе сортировки пузырьковой сортировки; Вы только итерируете данные один раз, что недостаточно для их сортировки.

Наконец, некоторые проблемы дизайна.

  1. У вас должна быть одна функция для сортировки данных и отдельная функция для ее печати. Не объединяйте две функции, как вы сделали здесь.
  2. Избегайте глобальных переменных. Передайте массив и его рабочую длину в функцию сортировки и в функцию печати, если она у вас есть.
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,

Другие вопросы по тегам