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小时内回复的(✪ω✪)