Я ищу простой, легко понять алгоритм сортировки в алфавитном порядке массив символов в C.Каким будет самый простой способ альфа-сортировки массива символов в C?
ответ
символов в C имеют числовые значения, которые происходят в полном порядке, так что вы просто лечить ваших персонажей, как целые числа , стандартная библиотека C включает функцию «qsort». Используйте это (man qsort
для Linux-подобной системы). Возможно, вам придется преобразовать буквы верхнего регистра в строчные буквы, чтобы упростить их, но это тривиально. Если вы хотите понять алгоритм quicksort (это тот, который вы должны изучить, потому что вы его действительно используете), см. Wikipedia.
Бадди Я уже знаю, как использовать Google, но я определенно preffer полагаться на опыт и надежность StackOverflow сообщества , – 2008-09-23 18:26:46
Easy? Сделайте пузырь.
Это ява и ИНТ, а не полукокса, но вы можете легко адаптировать его ...
int[] bubble(int a[])
{
for (int i = a.length; --i>=0;)
{
for (int j = 0; j<i; j++)
{
if (a[j] > a[j+1])
{
int T = a[j];
a[j] = a[j+1];
a[j+1] = T;
}
}
}
return(a);
}
наверняка, если вы хотите просто, вы могли бы также пойти для сортировки сортировки или выбора, а не для сортировки пузырьков? – Ben 2008-09-23 18:05:56
Спасибо, но я не могу использовать Java, я должен реализовать решение в plain C. – 2008-09-23 18:30:46
Просто попробуйте Bubble Sort, это самый простой алгоритм сортировки.
Не так медленно, как [Bogosort] (http://en.wikipedia.org/wiki/Bogosort) – 2008-09-23 18:16:52
Никогда не утверждайте, что алгоритм является «самым медленным» для конкретной задачи. Всегда можно писать медленнее. :) – Herms 2008-09-23 18:20:16
Звучит как домашнее задание для меня. Попробуйте прочитать wikipedia ...
Используйте метод QSort:
#include <stdlib.h>
int char_compare (const void * a, const void * b)
{
return *(const char *)a - *(const char *)b;
}
int main(){
const char char_array[] = { 'c', 'a', 'b' };
qsort (char_array, 3, sizeof(char), char_compare);
return 0;
}
Интересно, если вы действительно ищете алгоритм или просто способ решить эту проблему? Если последний, используйте C's qsort.
Если вам нужен алгоритм, перейдите на Insertion sort или Selection sort, так как они очень просты в понимании.
Если результат предназначен для людей, лучше использовать strcoll. Он медленнее, чем strcmp или strcasecmp, но он учитывает неанглийские символы. Если вы собираетесь использовать его, не забудьте указать свой локаль для LC_COLLATE, то есть
setlocale (LC_COLLATE, "");
Это довольно простой и асимптотически быстрый (N является размер массива):
const unsigned char in[N];
unsigned char out[N], *p=out;
size_t cnt[N]={0}, i, j;
for (i=0; i<COUNT; i++) cnt[in[i]]++;
for (i=0; i<256; i++) for (j=cnt[i]; j; j--) *p++=i;
Спасибо за ваш комментарий Бен! – 2008-09-23 18:29:19