Итак, я прочитал пять или шесть постов о том, как переставить массивы, некоторые в алфавитном порядке, некоторые в числовом, и я также прочитал главу. Это то, что я наконец-то придумал,
void selectionSort (string array[], int size)
{
int startScan, minIndex;
string minValue;
for(startScan = 0; startScan<(size-1); startScan++)
{
minIndex = startScan;
minValue = array[startScan];
string temp;
for(int index = startScan+1; index<size; index++)
if(array[index] <minValue)
{
minValue = array[index];
minIndex = index;
}
}
array[minIndex] = array[startScan];
array[startScan] = minValue;
system("pause");
}
Очевидно, это не работает. Это кричит мне о необходимости сломаться, когда я запускаю его. Я предполагаю, что это сработает, будь то int или любой из типов чисел. Черт, он, вероятно, даже запустился бы, если бы я настроил его как значения ASCII с типом char. Но фактическое назначение — строка, и я просто не могу понять это. Я думал о попытке вычеркнуть первую букву и преобразовать в char, чтобы алфавитно таким образом, но некоторые строки имеют одинаковую фамилию с другим именем, так что это тоже не сработает.
Что мне нужно исправить, чтобы позволить моему виду сортировать мой массив по алфавиту?
ОБНОВИТЬ Обновил то, что я изменил в коде после прочтения комментариев и пересмотра книги. Я больше не получаю сообщение об ошибке при запуске кода, но он по-прежнему не сортируется!
Поэтому по какой-то причине вы решили не использовать std (у вас есть как swap, так и sort)
Хочу отметить ваше внимание на:
temp = array[count];
array[count]=array[(count+1)]; <-- when count is exactly size -1 you are going to commit overflow to your array
array[(count+1)] = temp;
Вы должны убедиться, что ваша индексация не выходит за границы массива ..:
for(int count = 0; count<size -1 ; count++)
(Кстати, взгляните на std :: swap, возможно, вам будет лучше)
Существует очевидная проблема, когда вы делаете array[count
(когда
+ 1]count == size - 1
). И я не вижу, как код
собирается сортировать что угодно. Какой алгоритм вы пытаетесь
использовать?
Для начала вы получите исключение индекса за пределами границ, когда достигнете конца массива. Так как вы обращаетесь к count + 1, цикл for должен остановиться на size-1. Это похоже на начало пузырьковой сортировки, но реализовано не полностью. Сделайте небольшое исследование в пузырьковой сортировке, и вы должны получить свой ответ довольно быстро.