Что было бы самым простым способом альфа-сортировки массива символов в C? - PullRequest
1 голос
/ 23 сентября 2008

Я ищу простой, понятный алгоритм сортировки массива символов в алфавитном порядке в C.

Ответы [ 7 ]

5 голосов
/ 23 сентября 2008

символов в C имеют числовые значения, которые оказываются по порядку, так что вы просто рассматриваете свои символы как целые числа. стандартная библиотека C включает функцию «qsort». Используйте это (man qsort в Linux-подобной системе). Возможно, вам придется преобразовать прописные буквы в строчные, чтобы упростить задачу, но это тривиально. Если вы хотите понять алгоритм быстрой сортировки (это тот, который вы должны изучить, потому что вы действительно будете его использовать), см. Википедия .

2 голосов
/ 23 сентября 2008

Если результат предназначен для людей, лучше использовать strcoll. Это медленнее, чем strcmp или strcasecmp, но учитывает неанглийские символы. Если вы собираетесь использовать его, не забудьте установить свой язык для LC_COLLATE, т.е.

setlocale (LC_COLLATE, "");

2 голосов
/ 23 сентября 2008

Используйте метод 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;
}
1 голос
/ 23 сентября 2008

Интересно, вы действительно ищете алгоритм или просто способ решить проблему? Если последнее, то используйте C's qsort .

Если вам нужен алгоритм, выберите Сортировка вставок или Сортировка выделения , поскольку они очень просты для понимания.

1 голос
/ 23 сентября 2008

Просто попробуйте Bubble Sort , это самый простой алгоритм сортировки.

0 голосов
/ 26 июля 2010

Это довольно просто и асимптотически быстро (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;
0 голосов
/ 23 сентября 2008

Легко? Сделай пузырьковую сортировку.

Это java и int, а не char, но вы можете легко адаптировать его ...

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);
    }
...