源文件
#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
using namespace std;
/**
* 表 1 C++ STL 排序函数
函数名 用法
sort (first, last) 对容器或普通数组中 [first, last) 范围内的元素进行排序,默认进行升序排序。
stable_sort (first, last) 和 sort() 函数功能相似,不同之处在于,对于 [first, last) 范围内值相同的元素,该函数不会改变它们的相对位置。
partial_sort (first, middle, last) 从 [first,last) 范围内,筛选出 muddle-first 个最小的元素并排序存放在 [first,middle) 区间中。
partial_sort_copy (first, last, result_first, result_last) 从 [first, last) 范围内筛选出 result_last-result_first 个元素排序并存储到 [result_first, result_last) 指定的范围中。
is_sorted (first, last) 检测 [first, last) 范围内是否已经排好序,默认检测是否按升序排序。
is_sorted_until (first, last) 和 is_sorted() 函数功能类似,唯一的区别在于,如果 [first, last) 范围的元素没有排好序,则该函数会返回一个指向首个不遵循排序规则的元素的迭代器。
void nth_element (first, nth, last) 找到 [first, last) 范围内按照排序规则(默认按照升序排序)应该位于第 nth 个位置处的元素,并将其放置到此位置。同时使该位置左侧的所有元素都比其存放的元素小,该位置右侧的所有元素都比其存放的元素大。
*/
/**
* sort() 基于快速排序
* 使用条件:
* 1.容器支持的迭代器类型必须为随机访问迭代器。这意味着,sort() 只对 array、vector、deque 这 3 个容器提供支持。
* 2.如果对容器中指定区域的元素做默认升序排序,则元素类型必须支持<小于运算符;同样,如果选用标准库提供的其它排序规则,
元素类型也必须支持该规则底层实现所用的比较运算符;
* 3.sort() 函数在实现排序时,需要交换容器中元素的存储位置。这种情况下,如果容器中存储的是自定义的类对象,则该类的内部
必须提供移动构造函数和移动赋值运算符。
* 注意:sort()不保证相等元素的相对顺序不变;
*/
/**
* 语法:
* 1.//对 [first, last) 区域内的元素做默认的升序排序
void sort (RandomAccessIterator first, RandomAccessIterator last);
* 2.//按照指定的 comp 排序规则,对 [first, last) 区域内的元素进行排序
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
* 效率:该函数实现排序的平均时间复杂度为N*log2N(其中 N 为指定区域 [first, last) 中 last 和 first 的距离)。
*/
void printVector(std::vector<int> vec){
for (auto i = vec.cbegin(); i != vec.cend(); i++)
{
std::cout << *i << " " ;
}
std::cout << std::endl;
}
bool mycomp(int i, int j){
return i < j;
}
class mycomp2{
public:
bool operator() (int i, int j){
return i < j;
}
};
class mycomp3{
public:
bool operator() (int i, int j){
return i > j;
}
};
void testSort(){
std::vector<int> myvector{ 32, 71, 12, 45, 26, 80, 53, 33 };
//第一种语法,默认升序
std::sort(myvector.begin(), myvector.end());