c++ 官网手册 - sort
参考于官网
std::sort 函数是C++标准库中提供的排序函数,它使用一种称为 “Introsort”
的混合排序算法来排序容器中的元素。Introsort 实际上是一种结合了三种不同排序算法的算法:
快速排序(QuickSort):在大多数情况下,Introsort会选择快速排序作为主要的排序算法。快速排序是一种分而治之的算法,通过选择一个基准元素将数据分为两部分,并递归地对这两部分进行排序。
堆排序(HeapSort):为了防止快速排序在某些情况下性能下降,Introsort还会监测递归深度,当递归深度过深时,会切换到堆排序。堆排序利用了二叉堆数据结构来进行排序。
插入排序(InsertionSort):对于小规模的子数组,Introsort会切换到插入排序。插入排序是一种简单但效率较低的排序算法,对于小规模的数据集,它的性能通常较好。
Introsort的特点是在大多数情况下,快速排序会被优先选择,但当快速排序的性能不佳时,会切换到堆排序,同时对于小规模的子数组,会使用插入排序来提高性能。
总之,std::sort函数的实现是综合考虑多种情况的,以在不同的输入情况下获得较好的性能。这使得它在大多数情况下都能表现出良好的排序性能。
sort是默认升序排序
先导入:
#include
简单的理解:就是对一个容器里面的元素排序
下面是两种方法的排序
// 创建一个 std::vector 容器并添加一些元素
std::vector<int> nums = {5, 2, 8, 1, 9, 3};
// 使用 std::sort 对容器中的元素进行排序
std::sort(nums.begin(), nums.end());
//std::sort 函数的参数是迭代器,nums.begin() 表示容器中第一个元素的迭代器,
//nums.end() 表示容器中最后一个元素的后一个位置的迭代器
int nums_t[6] = {5, 2, 8, 1, 9, 3};
// 使用 std::sort 对整数数组中的元素进行排序
std::sort(nums_t, nums_t + 6); // 注意:a + 6 表示数组的结束位置的下一个位置
//std::sort 函数的参数是指向数组第一个元素和数组末尾后一个位置的指针
std::sort 函数的参数形式取决于你要对哪种类型的数据进行排序:
对于容器,你可以使用迭代器来指定排序范围
对于数组,你需要使用指针来指定排序范围。
要理解需要:1,明白函数模板。2,明白函数指针和使用。
c++ 官网手册 - sort
第一个版本
template<class RandomIt>
void sort(RandomIt first, RandomIt last);
排序范围内的元素将[first,last]范围内的元素按升序排序。
第一个版本使用操作符 < 比较元素
还有一个模板
std::sort 函数用于对指定范围内的元素进行排序。
第二个版本使用操作符 comp 比较元素。
等价元素不能保证保持原来的相对顺序(参见稳定排序)。
template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);
RandomIt:表示一个随机访问迭代器(Random Access Iterator)的类型,用于指向要排序的范围的首尾元素。
Compare:是一个可调用对象(函数指针、函数对象、lambda 表达式等),用于自定义比较元素的方式。这个对象应该是一个二元谓词,接受两个参数,并返回 bool 类型,指示比较结果。
需要注意的是,compareByAge 函数满足严格弱序(Strict Weak Ordering)的要求,以确保排序的正确性。这是 std::sort 等排序算法的前提条件。
初步运用举例:
// sort algorithm example
#include // std::cout
#include // std::sort
#include // std::vector
bool myfunction (int i,int j) { return (i<j); }
struct myclass {
bool operator() (int i,int j) { return (i<j);}
} myobject;
int main () {
int myints[] = {32,71,12,45,26,80,53,33};
std::vector<int> myvector (myints, myints+8); // 32 71 12 45 26 80 53 33
// using default comparison (operator <):
std::sort (myvector.begin(), myvector.begin()+4); //(12 32 45 71)26 80 53 33
// using function as comp
std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)
// using object as comp
std::sort (myvector.begin(), myvector.end(), myobject); //(12 26 32 33 45 53 71 80)
// print out content:
std::cout << "myvector contains:";
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
myvector contains: 12 26 32 33 45 53 71 80
88.合并两个有序数组