qsort函数和qsort函数的模拟实现

qsort函数

作用

对指定数组排序

使用

生成结果1 ,2,3,4,5

qsort(arr,sz,sizeof(arr[0]),sort_int),qsort函数需要传入4个参数

第一个arr是首元素地址,第二个sz是元素个数,第三个sizeof(arr[0])是

数组的一个元素的大小,第4个是个函数,用来判断是否要交换元素

对函数的放回值有要求,p1大于p2返回1,等于返回0,小于返回-1

排序默认为升序,降序的话只需要交换放回值

qsort函数的模拟实现

  可以使用冒泡排序的模板

具体内容为

函数传参

和qsort传参一样

然后函数里面是不知道参数类型的所以从更底端的方法进行数组的寻找和排序这样就不许哟知道数据类型也能够正确排序,且也能对各种类型进行排序,数组,字符串,结构体

int(*cmp)这是个函数变量指针返回值为整形,

将首元素地址base强制装换为char类型的指针,这样每次加一的话

指针地址也只是加一个字节,width是单个数据的大小,base+width*j也即是arr[j]这样也就完成了每个数据的实现 ,然后进入函数

若p1大于p2返回1,等于返回0,小于放回-1,用这个判断是否要进行交换数据                                 

若返回值为1,进入Swap函数

传参也和上面的一样

使用char类型的指针接收,目的也是为个每个地址都能遍历到

 

传入的p1为地址也就是首元素的首个字节的地址,char类型的指针加一也就是地址加一这样进行交换,进行width次,就把这俩个元素的全部字节交换,也即是将元素的值交换。

这样下来就实现了数组的一次排序,qsort函数的模拟也就是这样实现的

最后源代码附上

加油奥力给(๑•̀ㅂ•́)و✧

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值