qsort的第四个参数,辅助函数compare的关于不同排序对象的不同写法:
一、对int类型数组排序
int num[100]; int compare(const void *a, const void *b) { return *(int *)a - *(int *)b; }
二、对char类型数组排序(同int类型)
char word[100]; int compare(const void *a, const void *b) { return *(char *)a - *(int *)b; }
三、对double类型数组排序
double array[100]; int compare(const void *a, const void *b) { return *(double *)a > *(double *)b ? 1 : -1; }
注意qsort第三个参数是sizeof(array[0])。
四、对结构体一级排序
typedef struct node { double data; int other; }Node; array[100]; int compare(const void *a, const void *b) { return ((Node *)a)->data > ((Node *)b)->data ? 1 : -1; }
五、对结构体二级排序
typedef struct node { int x; int y; }Node; Node array[100]; //按照x从小到大排序,当x相等时按照y从大到小排序 int compare(const void *a, const void *b) { Node *p1 = (Node *)a; Node *p2 = (Node *)b; if (p1->x != p2->x) return p1->x - p2->x; else return p1->y - p2->y; }
六、对字符串进行排序
typedef struct node { int other; char string[100]; }Node; Node array[100]; //按照结构体中字符串string的字典顺序排序 int compare(const void * a, const void * b) { return strcmp(((Node *)a)->string, ((Node *)b)->string);
时间: 2024-10-21 03:33:53