1.qsort库函数使用
qsort
的使用主要注意传参,和自定义比较函数compare
int arr[] = { 9,3,6,8,1,4,9,10 };
int sz = sizeof(arr) / sizeof(int);
qsort(arr, sz, sizeof(int), compare);
compare
为自定义比较函数,参数类型与库函数对应,为const void*
int compare(const void* p1, const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
2.冒泡模拟实现“qsort”
- 利用冒泡排序思想模拟实现
qsort
,实际上为通用冒泡排序 - 函数体基本上和冒泡排序一致
void bubble_sort(void* buf, size_t num, size_t size,
int (*compare)(const void*, const void*))
{
for (int i = 0; i < num-1; i++)
{
for (int j = 0; j < num - 1 - i; j++)
{
char* buf1 = (char*)buf + j * size;
if (compare((char*)buf1, (char*)buf1 + 1 * size) > 0)
{
Swap((char*)buf1, (char*)buf1 + 1 * size, size);
}
}
}
}
- 上述代码用到的自定义
compare
函数,根据比较排序的元素类型定义 - 此处比较结构体中字符串成员
name
(字符串比较用strcmp
)
int cmp_by_name(const void* p1, const void* p2)
{
return strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name);