qsort是一个库函数,其头文件为stdlib.h,如下所示:
int cmp_int (const void*e1, const void*e2)
{
return (*(int*)e1 - *(int*)e2);(排序为整数时)
//return (*(char*)e1 - *(char*)e2);(排序为字符时)
.....
(排序什么类型的数据则改为相应的类型)
}
void myqsort(void* base, size_t nums, size_t size, int(*cmp)(const void*e1, const void*e2))
{
int i = 0;
for (i = 0; i < nums - 1; i++)
{
int j = 0;
for (j = 0; j < nums-1-i; j++)
{
if (cmp_int((char*)base + j * size, (char*)base + (j + 1) * size)>0)
{
swap((char*)base + j * size, (char*)base + (j + 1) * size, size);
}
}
}
}
base为待排序的起始位置,nums为数组的元素个数,size为该数组一个元素的字节大小。
cmp为一个比较函数(qsort要求使用者自定义一个比较函数),比较e1和e2的大小,
若e1大于e2,则函数返回一个大于一个零的数,
若e1等于e2,则函数返回一个等于一个零的数
若e1小于e2,则函数返回一个小于一个零的数。
如果cmp_int函数中是“>”号即是按从小到大排序;
反之则按从大到小。
其中的swap函数是交换e1和e2位置的。
附加一图: