qsort排序函数和sort排序函数对比

qsort排序函数

qsort函数是C语言编译器函数库自带的排序函数。它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)

功能: 使用快速排序例程进行排序
头文件:stdlib.h
用法: void qsort(void* base, size_t num, size_t width, int(__cdeclcompare)(const void, const void*));
参数:
待排序数组,排序之后的结果仍放在这个数组中
数组中待排序元素数量
各元素的占用空间大小(单位为字节)
指向函数的指针,用于确定排序的顺序(需要用户自定义一个比较函数)

qsort要求提供一个自己定义的比较函数。比较函数使得qsort通用性更好,有了比较函数qsort可以实现对数组、字符串、结构体等结构进行升序或降序排序。

例如比较函数 int cmp(const void *a, const void *b) 中有两个元素作为参数(参数的格式不能变),返回一个int值,比较函数cmp的作用就是给qsort指明元素的大小是怎么比较的。
以int类型为例

int num[100];
int cmp_int(const void* a, const void* b)  //参数格式固定
{
    return *(int *)a - *(int *)b;  
}
qsort(num, 100, sizeof(num[0]), cmp_int); 

可见,参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回*b-*a即可。

sort排序函数

1.sort函数包含在头文件为#include的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考虑!

2.sort函数的模板有三个参数:

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

1.第一个参数first:是要排序的数组的起始地址。

2.第二个参数last:是结束的地址(最后一个数据的后一个数据的地址)

3.第三个参数comp是排序的方法:可以是从升序也可是降序。如果第三个参数不写,则默认的排序

实例

bool cmp(int x,int y)
{
    return x >y;
}
//sort默认为非降序排序
int main()
{
    vector<int>a{2,5,1,4,6};
    //正向排序
    sort(a.begin(),a.end());
    for(auto i:a)
    {
        cout<<i<<" ";
    }
    cout<<endl;
    //反向排序
    sort(a.rbegin(),a.rend());
    for(auto i:a)
    {
        cout<<i<<" ";
    }
    cout<<endl;
 
    //带cmp参数的排序
    sort(a.begin(),a.end(),cmp);
    for(auto i:a)
    {
        cout<<i<<" ";
    }
    cout<<endl;
}

结果

1 2 4 5 6 
6 5 4 2 1 
6 5 4 2 1 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值