讲解C++中的sort(快速排序函数)(非常好用)

C++中有一门算法叫做排序,方法也是千方百计,比如冒泡排序法,选择排序法,快速排序等等。

但冒泡排序法和选择排序法都有个缺点:速度太慢,当你在考试的时候,最烦的就是超时了。冒泡排序法和选择排序法的时间复杂度是n²,而快速排序法的时间复杂度只有n*log2(n)。

log是什么意思呢,指的是a的b次方是n,a的值较常见的是2和10,因为2进制和10进制较常见,而在C++中,log的底数为2,真数是n,也就是2的多少次方是n,比如n是16,对数就应是4。所以快速排序法就快了许多。

例如给10^6个数排序,用前两种方法排序的话得需要10^12次计算,可log2(10^12)大概只有40,所以只需要大概4*10^7次计算。

好了,话不多说,来看看sort函数是如何使用的吧:

1>一位数组按升序排序

sort用法:sort(数组名,数组名+长度)

数组名其实指的是需要排序的第一项,数组名+长度指的是需要排序的最后一项,所以应该是sort(首地址,尾地址)

例如从a[0]到a[6]进行排序,应写成:sort(a,a+6);或sort(&a[0],&a[6]);

如果从a[3]到a[7]进行排序,应写成:sort(a+3,a+7);或sort(&a[3],&a[7]); 

2>一位数组按降序排序

sort用法:sort(数组名,​​​​​数组名+长度,greater<类型>());

类型里填数组的类型,是int就填int是char就填char;其他内容与升序相同。

3>结构体数组按某个成员大小排序

sort用法:sort(数组名,数组名+长度,cmp)

cmp为自定义比较函数,如果返回的值是true就不交换,是false就交换:比如你想按照结构体内的x的升序排序,cmp就应该这么写:

bool cmp(node a,node,b)
{
    return a.x<b.x;
}

但如果x相同,我们要按y的升序来排,cmp里这么写: 

bool cmp(node a,node,b)
{
    if(a.x==b.x)
    return a.y<b.y;
    else
    return a.x<b.x;
}

给个点赞、关注支持支持呗(^_^)

如果有不懂的的问题,可以留在评论区里,我会在24小时内回复的(✪ω✪)

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值