Проблемы с сортировкой по алфавиту
В общем, набросал сразу такую функцию для сортировки:
WORKER* sortNames(WORKER* array) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 9; j++) {
if (array[j].fio[0] > array[j + 1].fio[0]) {
WORKER tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
}
}
}
return array;
}
И это работало. Затем заменил на вариант, где будет сортировка по второму, третьему и т.д. символу, если первый одинаковый.
WORKER* sortNames(WORKER* array) {
std::cout << "Entering function\n";
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
std::cout << "Begginning cycle " << i + 1 << "/" << j + 1 << "\n";
bool isSorted = false;
int index = 0;
while (!isSorted) {
if (array[j].fio[index] > array[j + 1].fio[index]) {
WORKER tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
isSorted = true;
std::cout << "Sorting\n";
}
else if (array[j].fio[index] <= array[j + 1].fio[index]) {
index++;
std::cout << "Skipping\n";
}
}
}
}
return array;
}
При проверке на "Тест", "Ттест" и "Теест" получаю:
Entering function
Begginning cycle 1/1
Skipping
Skipping
Sorting
Begginning cycle 1/2
Skipping
Skipping
Sorting
Begginning cycle 2/1
Skipping
Sorting
Begginning cycle 2/2
Skipping
Sorting
Begginning cycle 3/1
Skipping
Skipping
Skipping
Skipping
Skipping
Sorting
Begginning cycle 3/2
. . .
И дальше много пропусков (явно выходящих за рамки слова) и последняя сортировка. Возвращённый массив, выводимый через
void showEmployees(WORKER* array) {
for (int i = 0; i < 3; i++) {
std::cout << "\n\nФИО работника: " << array[i].fio << "\nДолжность: " << array[i].position << "\nГод поступления на работу: " << array[i].year << "\n\n";
}
}
такой же как и изначальный. fio представляет собой char fio[40], вводится cin.getline(array[i].fio, 40) (ввод в цикле for, пропуск \n в конце цикла есть).