qsort排序的用法

发布时间 2023-05-30 20:35:13作者: 小蠕虫

//void Bubble_sort(int arr[], int sz)
//{
// int i = 0;
// for (i = 0; i < sz - 1; i++)//确定排序执行的次数
// {
// int j = 0;
// for (j = 0; j < sz - 1 - i; j++)//确定每次排序两组元素的对比次数
// {
// int tmp = 0;
// if (arr[j] > arr[j + 1])
// {
// tmp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = tmp;
// }
// }
// }
//
//}
struct Stu
{
char name[20];
int age;

};
int cmp_int(const void* e1, const void* e2)
{
return *(int*)e1 - *(int*)e2;//e1 e2 调用前需要类型转换
}
int cmp_float(const void* e1,const void* e2)
{
return (int)(*(float*)e1 - *(float*)e2);//返回值 转换成int 类型
}
int cmp_Stu_by_age(const void* e1, const void* e2)
{

return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;//e1 e2 调用前需要类型转换
}
int cmp_Stu_by_name(const void* e1, const void* e2)
{

return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);//e1 e2 调用前需要类型转换
//strcmp(a,b),比较字符串的大小 a>b return 1,a=b return 0,a<b return -1;
}
void test1()
{
int arr[10] = { 0,9,7,6,8,5,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);//库函数 //cmp_int 返回的是int 类型
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void test2()
{
float f[] = { 9.0,7.0,5.0,3.0,2.0 };
int sz = sizeof(f) / sizeof(f[0]);
qsort(f, sz, sizeof(f[0]), cmp_float);//cmp_float 返回的是int 类型
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%f ", f[i]);
}
printf("\n");
}
void test3()
{
struct Stu s[3] = { {"zhangsan",26},{"lisi",23},{"wangwu",25} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_Stu_by_name);
}
int main()
{
test1();
test2();
test3();
//Bubble_sort(arr, sz);
char a = 0;
void* p = &a;//void* 无类型指针 可以接收任意类型的地址
//不能进行解引用操作,不能进行+ - 操作;
return 0;
}