一、qsort函数:
1、定义:
void qsort (
void* base, //待排序数据的起始地址 size_t num, //待排序数据的元素个数 size_t size, //待排序数据元素的大小(单位是字节) int (*compar)(const void*,const void*) //比较2个元素大小的函数指针 );
对数组的元素进行排序:
对数组中指向的元素进行排序,每个元素的长度为字节,使用函数确定顺序。
此函数使用的排序算法通过调用指定的函数来比较元素对,并将指向这些元素的指针作为参数。该函数不返回任何值,而是通过对其元素进行重新排序来修改所指向的数组的内容。
2、参数:
(1).基础
指向要排序的数组的第一个对象的指针,该对象已转换为 .
void*
(2).数字
所指向的数组中的元素数。
是无符号整数类型。basesize_t
(3).大小
数组中每个元素的大小(以字节为单位)。
是无符号整数类型。size_t
(4).比较
二、总代码:
1、整型比较:
int compare(const void* p1, const void* p2)
{
return (*(int*)p1 - *(int*)p2);
}
void test()
{
int arr[] = { 3,5,7,2,9,6,1,8,4,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), compare);
print(arr, sz);
}
2、浮点型比较:
int compare(const void* p1, const void* p2)
{
return (int)(*(double*)p1 - *(double*)p2);
}
void test()
{
double arr[] = { 3.2,5.4,7.1,2.3,9.6,6.0,1.1,8.4,4.2,10.1 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), compare);
print(arr, sz);
}
3、字符串比较:
int compare(const void* p1, const void* p2)
{
return strcmp((char*)p1, (char*)p2);
}
void test()
{
char arr[] = "bgedfac";
int sz = strlen(arr);
qsort(arr, sz, sizeof(arr[0]), compare);
printf("%s", arr);
}
4、结构体比较:
struct stu
{
char name[10];
int age;
};
int compare_name(const void* p1, const void* p2)
{
return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}
int compare_age(const void* p1, const void* p2)
{
return (((struct stu*)p1)->age - ((struct stu*)p2)->age);
}
void print(struct stu s[],int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%s,%d ", s[i].name, s[i].age);
}
printf("\n");
}
test()
{
struct stu s[] = { {"zhangsan",33},{"lisi",22},{"wangwu",44} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), compare_name);
print(s, sz);
qsort(s, sz, sizeof(s[0]), compare_age);
print(s,sz);
}
版权归原作者 硌手的小虫子@ 所有, 如有侵权,请联系我们删除。