Bubble sort неправильно сортирует или выводит значения массива

0

У меня есть программа, которая принимает минимум три балла и максимум тридцать баллов и сохраняет их в массиве. Я пытаюсь использовать сортировку пузырьков в функции, которая сортирует значения, введенные пользователем в порядке возрастания. Сортировка не выводит значения в порядке возрастания, что я и пытался исправить в течение последнего часа. Часть кода, которую я пытаюсь исправить, находится в разделе "sortAscending".

#include <iostream>
#include <iomanip>

using namespace std;

void programInfo();
void inputList(double arr[], int &count);
void printList(double arr[], int n, int &count);
void sortAscending(double arr[], int n, int &count);

int main()
{
    double endProgram = 0;
    const int size = 30;
    double arr[size];
    int count = 0;
    int n = 0;
    while(endProgram != -1 || endProgram != -1.0)
    {
        programInfo();
        inputList(arr, count);
        printList(arr, n, count);
        sortAscending(arr, n, count);
        cout << "\n";
        cout << "Run program again? Enter -1 or -1.0 to end program."<< endl;
        cin >> endProgram;
            if (endProgram == -1 || endProgram == -1.0)
            {
                cout << "Thank you for using my program." << endl;
            }
    }
}

void programInfo()
{
     cout << "Statistical Calculator." << endl;
     cout << "Please follow instructions carefully." << endl;
     cout << "Enter one value at a time up to 30 values." << endl;
     cout << "You must enter valid data or program will not work." << endl;
     cout << "Enter -1 to signal end of data (-1 or -1.0)" << endl;
}

void inputList(double arr[], int &count)
{
    count = 0;
    char answer;
    cout <<"Input at least three values minimum, thirty values maximum." << endl;
    while (count < 30)
    {
        cout <<"Please enter a value." << endl;
        cin >> arr[count];
        count++;
        if (count == 3)
        {
            cout << "You have entered the minimum amount of values necessary." << endl; 
            cout << "Do you want to stop inputting values? (y/n)" << endl;
            cin >> answer;
            if (answer == 'y')
            {
                break;
            }
        }
    }
}

void printList(double arr[], int n, int &count)
{

    cout <<"Here is the list of values entered:" << endl;
    for (n = 0; n < count; n++)
        {
            cout << setw(8) << arr[n];
        }
}

void sortAscending(double arr[], int n, int &count)
{
    double temp;
    for (n = 0; n < count; n++)
    {
        for (int i = 0; i < count - 1; i++)
        {
            if(arr[i] < arr[n])
               {
                   temp = arr[n];
                   arr[n] = arr[i];
                   arr[i] = temp;
               }
            cout << arr[n] << endl;
        }
    }
}
  • 1
    Помогите мне: когда вы использовали отладчик, какие строки проблематичны?
  • 0
    В отладчике, похоже, ничего не пошло не так. это похоже на логическую ошибку, а не на синтаксис / ошибку времени выполнения.
Теги:

2 ответа

1
Лучший ответ

Привет, ваша проблема в том, что при сортировке пузырьков вам не следует сравнивать n с i, то есть сортировку вставки, вам нужно сравнить я с я + 1, поэтому условие в цикле я <count-1.

Также, как сказано, вы должны печатать массив вне двойного цикла, с другим циклом.

Надеюсь, это поможет.

for (int n = 0; n < count; n++)
{
  for (int i = 0; i < count - 1; i++)
  {
    if(arr[i] < arr[i+1])
    {
      temp = arr[i];
      arr[i] = arr[i+1];
      arr[i+1] = temp;
    }

  }
}
for(int i = 0; i < count; i ++){
  cout<<arr[i]<<" ";
}
  • 0
    спасибо, это именно то, что я хотел!
0

Похоже, вы выводите значения, пока вы находитесь в середине сортировки, а не после. Я бы удалил cout оттуда и потом итерацию через массив, чтобы распечатать после их сортировки.

  • 0
    Я пытался переместить выражение cout, но это тоже не сработало.
  • 0
    Я не очень хорош в сортировке, но что-то не так с твоим пузырем. mathbits.com/MathBits/CompSci/Arrays/Bubble.htm

Ещё вопросы

Сообщество Overcoder
Наверх
Меню