qsort函数,原本是基于快速排序算法的函数。
现在,我将使用冒泡排序算法来模拟实现qsort函数
首先复习qsort函数:
详细复习链接:认识qsort函数
与原来的去送人头函数相比,冒泡排序模拟的qsort函数仅仅是将qsort函数的主体
给重构了一下。
重新定义了排序时找元素的方式。仅此而已。
需要注意的是:
*cmp、cmp_int、cmp本质上属于一体。
cmp系列,返回值都是int。
代码分析图:
全部代码如下:
#include<stdio.h>
void swap(char*a, char*b, size_t c)
{
for (int i = 0; i < c; i++)
{
char j = *a;
*a = *b;
*b = j;
a++; b++;
}
}
int cmp_int(const void*e1, const void*e2)
{
return *(int *)e1 - *(int *)e2;
}
void bubb_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 + j*width, (char*)base + (j + 1)*width)>0)
{
swap((char*)base + j*width, (char*)base + (j + 1)*width, width);
}
}
}
}
void test()
{
int a[10] = { 1, 6, 8, 3, 2, 5, 7, 9, 0, 11 };
bubb_sort(a, 10, 4,cmp_int);
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
}
int main()
{
test();
return 0;
}
本例涉及重点:
指针运算
函数指针及其传参
回调函数
冒泡排序