qsort函数可以排序各种类型的数据,不仅仅能够排序一种类型的数据。
首先是qsort函数主体
void bubble_sort(void* base, size_t sz, size_t width, int(*cmp)(const void* e1, const void* e2))
{
for (int i = 0; i < sz - 1; i++)
{
for (int j = 0; j < sz - 1 - i; j++)
{
if (cmp((char*)base + width * j, (char*)base + width * (j + 1)) > 0)
{
swap((char*)base + width * j, (char*)base + width * (j + 1), width);
}
}
}
}
然后是cmp函数对指针指向的值进行比较大小
(整形数组比较函数)
int cmp_int(char* e1, char* e2)
{
return *(int*)e1 - *(int*)e2;
}
(结构体数组比较函数)
typedef struct book
{
int age;
char name[5];
}book;
int cmp_stru(const void* e1, const void* e2)
{
return strcmp(((book*)e1)->age,((book*)e2)->age);
}
最后再自定义交换函数swap
void swap(char* buf1, char* buf2, size_t width)
{
for (int i = 0; i < width; i++)
{
int tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++; buf2++;
}
}