Cómo comparar el orden lexicográfico c
Diseño de algoritmo:
(1) Defina una matriz de caracteres bidimensionales para almacenar los nombres de n estudiantes.
Nombre del personaje [N] [13];
(2) Utilice el método de clasificación selectiva para ordenar N cadenas a través de la función de comparación strcmp().
③Resultados de salida
Idea de clasificación selectiva
(1) En el primer paso, seleccione el registro con el valor de palabra clave más pequeño de n registros como El primer registro;
k = 0;
for (j = 1; j si (k! = 0) { t = a[k]; a[k ]= a【I 】; a【I】= t;}/*Intercambio de unidad K y unidad 0*/
(2) En la segunda pasada, de los N-1 registros restantes Seleccione el registro con la clave más pequeña valor como segundo registro
k = 1;
for (j = 1+1; j if (k! = 1) { t = a[k]; a[ k] = a[I]; a[I] = t;}
(3) Por lo general, en el paso I, seleccione la palabra clave con el valor de palabra clave más pequeño. El registro se extrae de los n- restantes. I+1 como el registro I-ésimo (I = 1, 2,...n-1)
k = I-1
for (j = I; j if (k! = 1) { t = a [k]; a [k] = a [I]; a [I] = t }
Para una matriz A de n elementos, El segmento de programa para seleccionar y ordenar en lenguaje C es:
for(I = 0; i { k = i
for(j = I+ 1; j if (k! = I ) { t = a [k]; a [k] = a [I]; a [I] = t }
}
Exactamente similar, tratamos los dos- nombre de carácter de matriz de caracteres dimensionales[N][13] como N matrices de caracteres unidimensionales:
Nombre[0], nombre[1], nombre[2],…, nombre [N-1].
En la sección del programa de clasificación de selecciones, compare dos números:
if (a [j] cambia a: if (strcmp (nombre [j], nombre[k]) p>
Y declaración de intercambio de datos: { t = a[k]; a[k] = a[I]; a[I] = t;}
Cambiar a: { strcpy(t , nombre[k]); strcpy(nombre[k], nombrea[I]); strcpy(nombre[I], t);}
Lista completa de programas
#Contiene "stdio.h"
#Contiene "string.h"
main()
{ nombre de cahr[10 ]【13】, temperatura【13】 ; int I;
for(I = 0; I<10;i++){
Printf("Ingrese los nombres de %d estudiantes Nombre:\n",I+1) ;
get(nombre[I]);
}
for(I = 0;I<9 ;i++)
{ k = I;
for (j = I+1; j & lt10;j++) if (strcmp (nombre[j], nombre[k]) <0)k = j;
si (k! = I) { strcpy(temp, nombre[k]);
strcpy(nombre[k], nombre[I]); strcpy(nombre[I], temp);
}
}
printf("Los nombres de 10 estudiantes están ordenados según el diccionario: \n");
for(I = 0; i<10 ;i++) printf ("\n % s", nombre [I]
}
);