Каким был бы самый простой способ альфа-сортировки массива символов в C?

StackOverflow https://stackoverflow.com/questions/122649

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

setlocale(LC_COLLATE, "");

Используйте метод 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;
}

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

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

Просто попробуй Пузырьковая сортировка это самый простой алгоритм сортировки.

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

Это 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);
    }

Это довольно просто и асимптотически быстрее (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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top