qsort函数是一个快速排序函数,在stdlib.h文件中定义,函数原型为viod qsort(void* base, size_t nelem,size_t width,int(*Comp)(const void* ,const void*))
;*base为要排序的数组名,nelem
为要排序数组的长度,width为数组元素的大小(一字节为单位)默认是从小到大排序的,
(*Comp)(const void* p1,const void*p2)
是自定义的判断大小的指针。
Comp函数的返回值在qsort说明:
<0 | p1将被排在p2前面 |
---|---|
0 | p1等于p2 |
>0 | p1将被排在p2后面 |
使用回调函数,模拟实现qsort(采用冒泡的方式)。
//自定义的比较函数
int int_cmp(const void* p1, const void* p2)
{
return(*(int*)p1 - *(int*)p2);
}
//按字节交换函数
void _swap(void* p1, void* p2, int size)
{
int i = 0;
for (i = 0; i<size; i++)
{
char tmp = *((char*)p1 + i);
*((char*)p1 + i) = *((char*)p2 + i);
*((char*)p2 + i) = tmp;
}
}
//使用冒泡排序模拟qsort
void bubble(void* base, int count, int size, int(*cmp)(void*, void*))
{
int i = 0;
int j = 0;
for (i = 0; i<count - 1; i++)
{
for (j = 0; j<count - i - 1; j++)
{
if (cmp((char*)base + j*size, (char*)base + (j + 1)*size)>0)
{
_swap((char*)base + j*size, (char*)base + (j + 1)*size, size);
}
}
}
}
先前有错误,已修改。