У меня есть программа, которая принимает минимум три балла и максимум тридцать баллов и сохраняет их в массиве. Я пытаюсь использовать сортировку пузырьков в функции, которая сортирует значения, введенные пользователем в порядке возрастания. Сортировка не выводит значения в порядке возрастания, что я и пытался исправить в течение последнего часа. Часть кода, которую я пытаюсь исправить, находится в разделе "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;
}
}
}
Привет, ваша проблема в том, что при сортировке пузырьков вам не следует сравнивать 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]<<" ";
}
Похоже, вы выводите значения, пока вы находитесь в середине сортировки, а не после. Я бы удалил cout оттуда и потом итерацию через массив, чтобы распечатать после их сортировки.