(一)为什么要用c++标准库里的排序函数
Sort()函数是c++一种排序方法之一,它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n),执行效率较高!
(二)c++标准库里的排序函数的使用方法
(1)sort函数包含在头文件为 #include”algorithm” 的c++标准库中,调用标准库里的排序方法可以不必知道其内部是如何实现的,只要出现我们想要的结果即可!
(2)Sort函数有三个参数:
1.第一个是要排序的数组的起始地址。
2.第二个是结束的地址(最后一位要排序的地址)。
3.第三个参数是排序的方法,可以是从小到大也可是从大到小,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
sort函数使用模板:
sort(start,end,排序方法)
下面就具体使用sort函数结合对数组里的十个数进行排序做一个说明!
例一:sort函数没有第三个参数,实现的是从小到大
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int arr[10] = { 8,5,7,3,9,2,1,0,6,4 };
cout << "排序前顺序: ";
for (int i = 0;i < 10;i++)
{
cout << arr[i] << " "; //输出排序前顺序
}
cout << endl;
sort(arr, arr + 10);
cout << "排序后顺序: ";
for (int i = 0;i < 10;i++)
{
cout << arr[i] << " "; //输出排序后顺序
}
cout << endl;
return 0;
}
输出结果:
例二:设置第三个参数,实现从大到小的排序
通过上面的例子,会产生疑问:要实现从大到小的排序怎么办?这就如前文所说需要在sort函数里的第三个参数里做文章了,告诉程序我要从大到小排序!需要加入一个比较函数compare,此函数的实现过程是这样的。
bool compare(int a, int b) //定义排序规则
{
return a > b; //从大到小排序
}
这就是告诉程序要实现从大到小的排序的方法!
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(int a, int b) //定义排序规则
{
return a > b; //从大到小排序
}
int main()
{
int arr[10] = { 8,5,7,3,9,2,1,0,6,4 };
cout << "排序前顺序: ";
for (int i = 0;i < 10;i++)
{
cout << arr[i] << " "; //输出排序前顺序
}
cout << endl;
sort(arr, arr + 10,compare);
cout << "排序后顺序: ";
for (int i = 0;i < 10;i++)
{
cout << arr[i] << " "; //输出排序后顺序
}
cout << endl;
return 0;
}
输出结果:
例三:利用sort函数对字符串从小到大排序
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
char str[10] ="adebchgfi";
cout << "排序前顺序: ";
for (int i = 0;i < 9;i++)
{
cout << str[i]; //输出排序前顺序
}
cout << endl;
sort(str, str+ 9);
cout << "排序后顺序: ";
for (int i = 0;i < 9;i++)
{
cout << str[i]; //输出排序后顺序
}
cout << endl;
return 0;
}
输出结果:
例四:利用sort函数对字符串从大到小排序
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(char a, char b) //添加排序规则
{
return a > b;
}
int main()
{
char str[10] ="adebchgfi";
cout << "排序前顺序: ";
for (int i = 0;i < 9;i++)
{
cout << str[i]; //输出排序前顺序
}
cout << endl;
sort(str, str+ 9,compare); //调用排序规则
cout << "排序后顺序: ";
for (int i = 0;i < 9;i++)
{
cout << str[i]; //输出排序后顺序
}
cout << endl;
return 0;
}
输出结果: