usar una recorrer palabras ordenar metodo letras leer como caracteres cadenas cadena burbuja arreglo alfabeticamente c arrays sorting character

recorrer - ¿Cuál sería la forma más sencilla de alfa ordenar una matriz de caracteres en C?



ordenar palabras alfabeticamente metodo burbuja java (9)

¿Fácil? Haz una especie de burbuja.

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

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


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

Si quiere un algoritmo, vaya a Insertion Sort o Selection Sort , ya que son muy simples de entender.


Si el resultado es para humanos, es mejor usar strcoll. Es más lento que strcmp o strcasecmp, pero representa los caracteres que no son inglés. Si va a usarlo, no se olvide de configurar su configuración regional para LC_COLLATE, es decir,

setlocale (LC_COLLATE, "");


Solo prueba Bubble Sort, que es el algoritmo de clasificación más fácil.


Suena como una tarea para mí. Intenta leer wikipedia ...


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



los caracteres en C tienen valores numéricos que están en orden, por lo que solo trata a sus caracteres como enteros. la biblioteca estándar C incluye una función ''qsort''. Usa eso ( man qsort en un sistema de tipo linux). Puede que tenga que convertir letras mayúsculas a minúsculas para simplificar las cosas, pero eso es trivial. Si quieres entender el algoritmo de la solución rápida (que es el que debes aprender, porque realmente lo usarás), mira Wikipedia .


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;