一、基本用法
std::sort()
是C++标准库中的一个函数,用于对给定范围内的元素进行排序。它可以接受一个数组、向量或其他容器,并按照默认的升序方式对元素进行排序。
#include <algorithm> // 引入算法头文件
// 对数组进行排序
int arr[] = {5, 3, 1, 4, 2};
std::sort(arr, arr + sizeof(arr) / sizeof(int));
// 对向量进行排序
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end());
在上述示例中,std::sort()
函数接受两个迭代器作为参数,表示要排序的范围。对于数组,可以使用指针运算来指定范围;对于向量,可以使用.begin()
和.end()
方法来获取范围。
默认情况下,std::sort()
使用"小于"运算符(<
)来比较元素并进行排序。
二、升序降序
std::sort()
函数一般默认进行的是升序排序,如果需要自定义比较函数或使用其他排序准则,可以通过提供第三个可选参数来实现,具体来说,可以使用std::greater
这个预定义的函数对象。
#include <algorithm> // 引入算法头文件
#include <vector> // 引入向量头文件
#include <functional> // 引入功能性头文件
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end(), std::greater<int>());
在这个例子中,std::greater<int>()
作为第三个参数传递给std::sort()
函数,它告诉std::sort()
使用大于运算符(>
)来比较元素,从而实现降序排序。
此外,如果不想使用预定义的std::greater
,也可以自定义比较函数。例如,使用lambda表达式来定义一个降序比较函数:
std::sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });
或者
bool greaterSort(const int &a, const int &b)//自定义函数
{
return a > b
}
std::sort(vec.begin(), vec.end(), greaterSort);
这样,std::sort()
函数会使用这个lambda表达式或自定义函数来进行比较和排序,同样可以实现降序排序。
三、sort排序原理
- 确定排序范围:通过传递的起始和结束迭代器来确定需要排序的元素范围。
- 选择合适的排序算法:
std::sort
并不是单一的一种排序算法,而是根据数据的特点和数量选择最合适的排序方法。它通常使用经过优化的快速排序算法,但在某些情况下,比如小数组或者近乎有序的情况下,可能会使用插入排序或堆排序。 - 进行排序:在确定了排序算法后,
std::sort
会根据比较函数(如果没有提供,则使用默认的比较方式)对元素进行排序,直到整个序列变得有序。 - 时间复杂度:
std::sort
的平均时间复杂度为 O(N·log(N)),其中 N 是需要排序的元素数量。