Проблемы с C ++ Bubble Сортировка двумерного массива символов

Этот вопрос касается кода, который я пишу для назначения, так что да, я должен использовать сортировку по пузырькам, и да, я должен использовать массивы.

Хорошо, я делаю тонкую пузырьковую сортировку одномерных массивов, но попытка сортировки двух вызывает у меня горе.

Я пытаюсь отсортировать список имен (т.е. Джо, Боб, Бетти, Джейк) в алфавитном порядке. Используя следующий код, программа пытается сортировать вещи (имена перемещаются), но обычно это только частично верно.

#include <iostream>
#include <fstream>
using namespace std;
void AlphaSort(char [][50]);
void GetInput(char [][50]);
void PrintArray(char [][50]);

int main()
{
char name[4][50];
cout << "Please enter 4 names:\n";
GetInput(name);
cout << endl << "The following names were received:\n";
PrintArray(name);
cout << endl << "The names will now be sorted.\n\n"<< "Calling Sort Function....\n";
AlphaSort(name);
cout << endl << "The sorted name order is now:\n";
PrintArray(name);

return 0;
}

void GetInput(char name[][50])
{
int i;

for(i=0; i<4; i++)
cin.getline(name[i], 50);
}

void PrintArray(char name[][50])
{
int i;

for(i=0; i<4; i++)
cout << name[i] << endl;
}

void AlphaSort(char name[][50]) //I'm pretty sure the problem is in here.
{
int Nnames = 4, pass, column, row, letter, sorted;
char temp[50];

cout << "Sorting Function Successfully Called...\n"<< endl << "Names recieved by sort function:\n";

PrintArray(name);

//Specifically in this attempt at a bubble sort.
for(pass=0; pass<(Nnames-1); pass++)
{
for(row=0; row<(Nnames-pass-1); row++)
{
for(column=0, sorted=0; sorted==0; column++)
{
if(name[row][column]>name[row+1][column])
{
for(letter=0; letter<50; letter++)
temp[letter] = name[row][letter];
for(letter=0; letter<50; letter++)
name[row][letter]= name[row+1][letter];
for(letter=0; letter<50; letter++)
name[row+1][letter] = temp[letter];
sorted = 1;
}
else if (name[row][column] == name[row+1][column]);
}
}
}

cout << endl << "Name order post sort:\n";

PrintArray(name);
}

Запуск этого в настоящее время выглядит примерно так обычно.

Пожалуйста, введите 4 имени: Хэмми Гарри Эш Аарон

Были получены следующие имена: Hammy Harry Ashe Aaron

Имена теперь будут отсортированы.

Вызов функции сортировки …. Функция сортировки успешно вызвана …

Имена, полученные с помощью функции сортировки: Hammy Harry Ashe Aaron

Название порядка сортировки постов: Аарон Эш Гарри Хэмми

Порядок сортировки имен теперь: Аарон Эш, Гарри Хэмми

Я смотрю вокруг на подобные проблемы, но я не могу понять, почему это глупо.

3

Решение

Кажется, моя проблема заключалась в том, что в моем операторе if не учитывалась вероятность того, что оно уже было в правильном порядке, что заставляло его работать циклически, пока позднее не было найдено письмо, которое он хотел переключить. Исправленный код выглядит так:

void AlphaSort(char name[][50])
{
int Nnames = 4, pass, column, row, letter, sorted;
char temp[50];

cout << "Sorting Function Successfully Called...\n"<< endl << "Names recieved by sort function:\n";

PrintArray(name);

for(pass=0; pass<(Nnames-1); pass++)
{
for(row=0; row<(Nnames-pass-1); row++)
{
for(column=0, sorted=0; sorted==0; column++)
{
if(name[row][column]>name[row+1][column])
{
for(letter=0; letter<50; letter++)
temp[letter] = name[row][letter];
for(letter=0; letter<50; letter++)
name[row][letter]= name[row+1][letter];
for(letter=0; letter<50; letter++)
name[row+1][letter] = temp[letter];
sorted = 1;
}
else if (name[row][column]<name[row+1][column])//This is the fix.
sorted = 1;
}
}
}

cout << endl << "Name order post sort:\n";

PrintArray(name);
}
0

Другие решения

Других решений пока нет …