往期文章推荐:
[C++] 非常实用的知识点-CSDN博客
1.8编程基础之多维数组————14:扫雷游戏地雷数计算-CSDN博客
(并不怎么华丽的分割线)
前言
话说在C++中有这么一类算法,叫做排序算法。
它有许多分支:冒泡排序,桶排序,希尔排序,插入排序......
数不胜数啊。
俗话说得好,学排序从冒泡学起。正好本人写过一篇排序算法之冒泡排序-CSDN博客,欢迎各位浏览(无齿地为自己打个小广告)。
OK言归正传。(哈哈哈)
又有一句俗话说得好,排序算法真难学。
所以说,C++里有没有这么一种东西,可以让我们少受甚至不受学排序的痛苦?
还真有。
这种东西,叫函数。
这种函数,叫sort。
接下来,坐稳喽,起飞!
sort,启动!
有同志会认为sort是快速排序。
错了!同志们错了一半啊!
sort确实是快速排序,但它不完全是快速排序。
它是快速排序加归并排序的结合体。
光看看就知道,它非常快。
那么怎么定义sort呢?
众所周知,每个函数都有它的头文件。
sort的头文件很难记:#include<algorithm>
啊(一万点暴击伤害)!!!!!!!
没事,咱们不是有万能头文件吗:#include<bits/stdc++.h>
但是某些网站不让用万能头怎么办呢?
只能手搓。所以还是得记普通头文件。
啊哈哈,跑题了。
OK那么sort怎么定义呢?
sort(a+1,a+n+1) //举例
什么意思呢?
一般我们都是对一个数组进行排序,所以例子里的a就是个数组。
可是数组不能像变量一样加减,那么这里的a代表的其实是数组a的地址。
a+1,a+n+1代表的是要排序的范围。
了解了基本的定理,我们就编上一段代码来试一下sort的威力。
int n,i;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(i=1;i<=n;i++) cout<<a[i];
运行结果(样例):
我们得出一个结论:sort默认从小到大排序。
如果我们想从大到小排序呢?
我们可以自定义一个辅助排序的函数叫cmp(比较函数),建议大家不要乱起名字。
cmp可以定义为int或bool类型,因为它需要返回值。
在cmp内部,我们可以这么写:
int cmp(int x,int y)
{
return x>y;
}
我们比较的是数组,所以这里默认的是前后两个值。
如果x大于y,那么我们返回的就是真值,程序就会从大到小排序。
对了,cmp作为sort的第三个参数使用。
把上述代码加上,再运行一下:
从大到小排序,成功!
sort,启动!
后记
sort很容易忘,大家牢记,sort掌握,你就基本不用再学其他的排序算法了。
感谢各位的浏览!Thanks♪(・ω・)ノ