Pregunta

Estoy buscando un algoritmo simple y fácil de entender para ordenar alfabéticamente una serie de caracteres en C.

¿Fue útil?

Solución

Los caracteres en C tienen valores numéricos que están en orden, por lo que simplemente tratas a tus caracteres como números enteros.la biblioteca estándar de C incluye una función 'qsort'.Usa eso (man qsort en un sistema tipo Linux).Es posible que tengas que convertir letras mayúsculas a minúsculas para simplificar las cosas, pero eso es trivial.Si desea comprender el algoritmo de clasificación rápida (ese es el que debe aprender, porque realmente lo usará), consulte Wikipedia.

Otros consejos

Si el resultado está destinado a humanos, es mejor utilizar strcoll.Es más lento que strcmp o strcasecmp pero tiene en cuenta caracteres que no están en inglés.Si va a utilizarlo, no olvide configurar su configuración regional para LC_COLLATE, es decir.

setlocale(LC_COLLATE, "");

Utilice el 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;
}

Me pregunto si realmente estás buscando un algoritmo o simplemente una forma de resolver el problema.Si es lo último, entonces use qsort de C.

Si quieres un algoritmo, ve por Tipo de inserción o Orden de selección, ya que son muy simples de entender.

Sólo inténtalo Ordenamiento de burbuja ese es el algoritmo de clasificación más sencillo.

¿Fácil?Haz una clasificación de burbujas.

Esto es java e int en lugar de char, pero puedes adaptarlo fácilmente...

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

Esto es bastante simple y asintóticamente más rápido (N es el tamaño de la 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top