qsort
可以排序任意类型的数据
qsort-库函数-排序
void qsort(void base, size_t num, size_t width, int(cmp)(const void e1, const void e2) );
int型
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;
}
void test1()
{
int a[] = { 1,2,3,0,9,8,7,5,4,6 };
int sz = sizeof(a) / sizeof(a[0]);
qsort(a, sz, sizeof(a[0]), cmp_int);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", a[i]);
}
}
演示1
float型
int cmp_float(const void* e1, const void* e2)
{
return ((int)(*(float*)e1 - *(float*)e2));
}
void test2()
{
float f[] = { 1.2,3.4,9.8,7.6,5.0 };
int sz = sizeof(f) / sizeof(f[0]);
qsort(f, sz, sizeof(f[0]), cmp_float);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%.2f ", f[i]);
}
}
演示2
结构体
名字
struct Stu
{
char name[20];
int age;
};
int cmp_stu_by_name(const void* e1, const void* e2)
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
void test3()
{
struct Stu s[3] = { {"zhangsan",20},{"lisi",25},{"wangwu",30} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%s\n",s[i].name);
}
}
演示3
年龄
struct Stu
{
char name[20];
int age;
};
int cmp_stu_by_age(const void* e1, const void* e2)
{
return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
void test4()
{
struct Stu s[3] = { {"zhangsan",30},{"lisi",20},{"wangwu",25} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d\n", s[i].age);
}
}