Это:
char* title_temp = title_arr[i];
title_arr[j] = title_temp;
Эквивалентно:
title_arr[j] = title_arr[i];
Вы никогда не меняете их местами, вы просто копируете одно в другое. Вы должны добавить эту строку:
title_arr[i] = title_arr[j];
Между двумя. Таким образом, вы будете перезаписывать [i]
с помощью [j]
, но _temp
по-прежнему содержит старое значение [i]
, поэтому вы можете скопировать это значение в [j]
, поменяв их местами.
Полагаю, это также время для урока по алгоритмам. Ваш алгоритм известен как «пузырьковая сортировка» алгоритм. Он известен своей простотой, но в реальных условиях он известен своей неэффективностью (технический термин - «sux», а настоящий технический термин - производительность O(n^2)
(«N в квадрате»)). Некоторые более распространенные (и более эффективные) алгоритмы включают, среди прочих, Quicksort , сортировка слиянием и Heapsort . Подробнее об измерении алгоритмической масштабируемости см. Статью о Big Oh нотации . *
Но, как указал vava в комментарии, если ваше задание не состоит в том, чтобы написать собственную функцию сортировки, вы получите лучшую производительность с qsort
(в C) или std::sort
(в C ++).
int mystrsort(const void *a, const void *b)
{
return strcmp(*(const char **)a, *(const char **)b);
}
// later:
qsort(title_arr, sizeof title_arr / sizeof(char *), sizeof(char *), mystrsort);
Я не собираюсь наносить удар по std::sort
, но он будет работать примерно так же (возможно, проще). **
* Обратите внимание, что любой, кто любит, может свободно менять эти ссылки в Википедии на ссылки переполнения стека. Было бы лучше сделать ссылку на SO, я только что связался с Википедией, потому что я знал, как быстрее найти нужную информацию.
** Обратите внимание, что любой, кто любит, может добавить std::sort
пример. Я просто недостаточно знаком с C ++.