//void qsort(void* base, //指向了需要排序的数组的第一个元素
// size_t num,//排序的元素个数
// size_t size,//一个元素的大小,单位是字节
// int (*cmp)(const void*,const void*)
//函数指针类型 - 这个函数指针指向的函数,能够比较base指向数组中的两个元素,原始数组中的元素会按照指定的比较函数的规则进行重新排列
// );
在使用之前根据这个函数原型,我们要摘出个别重要的点来说一说
void*的指针
1.无具体类型的指针-可以接受任意类型的地址
2.这种类型的指针,不能直接进行指针运算,需要强制转换作为前提
3.这种类型的指针,不能直接解引用操作-正确方式 *(类型*)空指针名
qsort头文件
qsort全名quick sort,翻译成中文叫快速排序,时间复杂度为平均情况下 O(nlogn),最坏情况下可能达到 O(n^2),具体的时间复杂度可能因实现而异。在stdlib.h中,qsort是在原地排序,没有返回新的数组副本,而是直接修改原始数组中的元素顺序
比较函数规则
比较函数应该返回一个整数值,指示两个元素的大小关系。
- 如果返回负数,表示第一个元素小于第二个元素。
- 如果返回零,表示两个元素相等。
- 如果返回正数,表示第一个元素大于第二个元素。
---------------------------------------------------------------------------------------------------------------------
通过上边的扩展,那么现在我们,观看一个qsort例子如下
int compare_int(const void* p1, const void* p2)
{
return (*(int*)p1 -*(int *)p2);
}
void print(int arr[],int sz)
{
int i = 0;
for (i;i<sz;i++)
{
printf("%d ",arr[i]);
}
}
test1()
{
int arr[10] = { 9,8,7,6,5,4,3,2,1,0};
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz,sizeof(arr[0]), compare_int);
print(arr,sz);
}
int main()
{
test1();
return 0;
}
输出结果:0 1 2 3 4 5 6 7 8 9