qsort 使用的几个例子
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 5 typedef struct { //char name[10]; char *name; int age; } Stu; int compar(const void *a, const void *b) { return ((Stu*)a) -> age - ((Stu *)b) -> age; } int compar1(const void *a, const void *b) { return strcmp( ((Stu*)a) -> name, ((Stu *)b) -> name ); } int main() { Stu emp[SIZE] = { {"Elaine", 23}, {"Jerry", 25}, {"Kramer", 20}, {"George", 22}, {"Newman", 19} }; //qsort(emp, SIZE, sizeof(*emp), compar); qsort(emp, SIZE, sizeof(*emp), compar1); int i; for (i = 0; i < SIZE; i++) { printf("%7s -> %d\n", (emp+i)->name, (emp+i)->age); } }
#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 5 int compar(const void *a, const void *b) { return strcmp( *(char **)a, *(char **)b ); //这里为什么是char**需要真正弄清楚。 } int main() { char *names[SIZE] = {"Kramer", "Elaine", "Jerry", "Newman", "George"}; //char **p = names + 1; //names + 1的类型是char**。 //printf("%s\n", *p); qsort(names, SIZE, sizeof(*names), compar); //传递给compar的变量值是names + 1, names + 2, ... 而这些值的类型是char **,这就是为什么在compar函数中类型强制转换时,要使用char**。 int i; for(i = 0; i < SIZE; i++) { printf("%s\n", *(names + i)); } return 0; }