Pratique pour apprendre l'API. Si vous triez un tableau qui contient également des éléments vides dans l'ordre croissant, Le blanc vient au début.
Si vous ne voulez pas que les blancs soient comparés Triez en spécifiant la longueur du tableau.
qsort(table, 4, sizeof(table[0]), compare_char);
La partie 4 de est applicable.
qsort.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare_char(const void* left, const void* right) {
char *left_char = (char *)left;
char *right_char = (char *)right;
return strcmp( left_char, right_char );
}
int main() {
int i=0;
char table[10][20] = {
"123",
"A0",
"Z0",
"9w3"
};
for(i=0; i<10; i++) {
printf("%d %s\n", i, table[i]);
}
printf(" --- sort\n");
qsort(table, 4, sizeof(table[0]), compare_char);
for(i=0; i<10; i++) {
printf("%d %s\n", i, table[i]);
}
}
En réponse au commentaire indiqué, la fonction de comparaison de la destination appelée a été modifiée pour que les informations de type de l'objet soient reçues avec précision. De plus, le code a été modifié pour que la fin du tableau puisse être définie avec «NULL» et que la fin du tableau de caractères puisse être détectée.
qsort-withPointer.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int compare_char(const void* left, const void* right) {
const char *left_char = *(const char **)left;
const char *right_char = *(const char **)right;
return strcmp( left_char, right_char );
}
int main() {
int i=0;
//Équivaut à placer une chaîne littérale dans un tableau
const char* s0 = "123";
const char* s1 = "A0";
const char* s2 = "Z0";
const char* s3 = "9w3";
//Garde à la fin du tableau(NULL)Endroit
const char* table[] = {s0, s1, s2, s3, NULL};
printf(" --- original\n");
// table[]Comptez les éléments de
//Incrémentez le compteur jusqu'à ce qu'il trouve un NULL qui représente la fin du tableau
i=0;
while(table[i]) {
printf("%d %s\n", i, table[i]);
i++;
}
printf(" --- sort\n");
qsort(table, i, sizeof(*table), compare_char);
i=0;
while(table[i]) {
printf("%d %s\n", i, table[i]);
i++;
}
}
Recommended Posts