说下最近学到的吧,C++中的STL库中的sort函数。
说起来这STL库真的是很好用,之前敲算法题排序的话都是自己一个字母一个字母敲上去的。无非就是冒泡啊简单选择啊桶啊之类的。
而sort函数用起来是非常方便的,它本质上其实就是快排,涉及到了二分法,所以说它用起来效率是非常高的,最不济也是和冒泡用的时间一样,时间复杂度为n*log2(n)。
但是它用代码实现起来还是挺麻烦的,主要是至少也得40多行吧,谁能保证自己每次用它的时候不会出点差错呢。
所以就有大能把它写进了STL库中,用起来直接调用。
Sort函数包含在头文件为**#include**的c++标准库中。
C++要用的话还得加上一句
using namespace std;
Sort函数有三个参数:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址的下一地址)
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
也就是说想要用它的话,比方说是数组a[n],他有n个元素,所以最后一个元素存放在a[n-1]中,但是要用sort函数排序的话结束地址写的是a[n]的,举个栗子吧。
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
sort(a,a+10);
for(int i=0;i<10;i++)
printf("%d",a[i]);
return 0;
}
就这么短就完成了排序。
但是这个是默认的从小到大进行排序,那如果我们想对它进行从大到小排序又如何实现呢,别忘了我们前面说过sort函数是有三个参数的,第三个参数就是它的排序方法,我们需要在外面再定义一个函数。
#include<stdio.h>
#include<algorithm>
using namespace std;
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
sort(a,a+10,cmp);//在这里就不需要对compare函数传入参数了
for(int i=0;i<10;i++)
printf("%d",a[i]);;
return 0;
}
这个cmp函数可以玩的点很多,还得自己再去琢磨。好了,C++还是很吸引人的,至少我上钩了。