Pergunta

Eu estou procurando um simples, fácil de entender algoritmo para ordenar alfabeticamente um array de caracteres em C.

Foi útil?

Solução

caracteres em C têm valores numéricos que acontecem estar em ordem, assim você só trata seus personagens como números inteiros. a biblioteca padrão C inclui uma função 'qsort'. Use esse (man qsort em um linux-like sistema). Você pode ter que converter letras maiúsculas para minúsculas para simplificar as coisas, mas isso é trivial. Se você quiser entender o algoritmo quicksort (que é o que você deve aprender, porque você vai realmente usá-lo), consulte Wikipedia .

Outras dicas

Se o resultado é destinado para os seres humanos, é melhor usar strcoll. É mais lento, em seguida, strcmp ou strcasecmp mas responde por caracteres não-inglês. Se você estiver indo para usá-lo não se esqueça de definir a sua localidade para LC_COLLATE, i.

setlocale (LC_COLLATE, "");

Use o método 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;
}

Gostaria de saber se você está realmente à procura de um algoritmo ou apenas uma maneira de resolver o problema? Neste último caso, em seguida, usar de C qsort .

Se você quiser um algorith, ir para ordenação por inserção ou Seleção tipo , como eles são muito simples de entender

Apenas tente Bubble Sort que é o mais fácil algoritmo de classificação.

Fácil? Fazer uma espécie de bolha.

Esta é java e int em vez de char, mas você pode facilmente adaptá-lo ...

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

Este é bastante simples e assintoticamente mais rápido (N é o tamanho da matriz):

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top