c语言排序库函数,C语言 stdlib.h自带函数库:qsort()排序,简称"快排"

对于qsort()函数的描述,stdlib.h的描述很有意思:

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

void* base表示的是:任何形式的数组,int*,char*,float*都可以,任何指针都可以赋给void*

size_t num表示的是:size_t其实就是int的意思,这里需要你定义出这个数组的长度

size_t width表示的是:sizeof(你定义的这个数组的类型),比如sizeof(int)

int(__cdecl*compare)(const void*,const void*)表示的是:这是一个返回类型为int,函数名字为compare,其中两个参数都为const void*类型的函数

下面我来编写一个实例来演示这个qsort如何使用:

void print(int a[],int n)

{

for(int i=0;i

printf("%d\t",a[i]);

}

int compare(const void *a,const void *b)

{

int *a1=(int *)a;//因为a为void*类型,需要把其转换成int*类型

int *b1=(int *)b;//因为b为void*类型,需要把其转换成int*类型

int num1=*a1;//将a1的值赋给num1

int num2=*b1;//将b1的值赋给num2

return num1-num2;//返还出num1于num2的差

}

int main(){

int a[8]={8,5,6,1,2,4,7,3};

int n=8;

qsort(a,n,sizeof(int),compare);

print(a,n);

}

实际上,如果你理解列compare函数,其实可以把compare函数写的很简单

int compare(const void *a,const void *b)

{

return *((int *)a)-*((int *)b);

}

这里必须要强调的是compare函数一定是要返还int类型,这个是stdlib.h规定好了的,所以一定要按上述的要求定义函数,决对不能更改!

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

这里挖一个坑,如果我定义一个float数组,那么这个数组是如何qsort()来求解呢?下回讲解。

除了qsort以外,stdlib还有一个有意思的查找函数bsearch(),下次也抽时间讲解。

标签:compare,const,函数库,int,void,qsort,C语言,size

来源: https://www.cnblogs.com/oldfish123/p/13179082.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值