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

 

posted @ 2025-04-17 21:39  profesor  阅读(7)  评论(0)    收藏  举报