一、合并排序算法 - merge 函数
1、函数原型分析
在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 merge 合并排序算法函数 用于 将 两个已排序好的容器 合并成一个新的已排序的容器 ;
merge 合并排序算法 函数原型 如下 :
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2,
OutputIterator result);
-
参数解析 :
- InputIterator1 first1 参数 : 有序 输入 容器 1 的 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
- InputIterator1 last1 参数 : 有序 输入 容器 1 的 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
- InputIterator2 first2 参数 : 有序 输入 容器 2 的 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
- InputIterator2 last2 参数 : 有序 输入 容器 2 的 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
- 返回值解析 : 将上述 两个输入容器 迭代器的范围 的元素 进行 合并排序 , 放入到 输出容器中 , 返回的迭代器 是 指向 " 有序输出容器 首元素 " 的迭代器 ;
2、代码示例
代码示例 :
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"
int main() {
// 输入容器
vector<int> v1 = { 1, 3, 5 };
vector<int> v2 = { 2, 4, 6 };
// 输出容器
vector<int> v3(v1.size() + v2.size());
// 合并 v1 和 v2 到 v3 , 默认使用 < 操作符进行比较
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
// 向 foreach 循环中传入 Lambda 表达式
for_each(v3.begin(), v3.end(), [](int a) {
cout << a << " ";
});
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
1 2 3 4 5 6
Press any key to continue . . .
二、随机排序算法 - random_shuffle 函数
1、函数原型分析
在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 random_shuffle 随机排序算法函数 用于 对容器中的元素进行随机排序 ;
random_shuffle 随机排序算法 函数原型 如下 :
template <class RandomAccessIterator>
void random_shuffle(RandomAccessIterator first, RandomAccessIterator last);
-
参数解析 :
- RandomAccessIterator first 参数 : 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
- RandomAccessIterator last 参数 : 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
- 返回值解析 : 没有返回值 ;
2、代码示例
在下面的示例中 ,
vector 单端数组 容器中 , 初始元素顺序为 :
9 5 2 7
调用 如下代码 :
// 随机排序
random_shuffle(myVector.begin(), myVector.end());
进行随机排序后 , 再次查看元素顺序 , 变为 :
9 5 7 2
代码示例 :
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"
int main() {
// 要随机排序的容器
vector<int> myVector{9, 5, 2, 7};
// 遍历打印容器中元素内容
for_each(myVector.begin(), myVector.end(), [](int a) {
cout << a << " ";
});
cout << endl;
// 随机排序
random_shuffle(myVector.begin(), myVector.end());
// 遍历打印容器中元素内容
for_each(myVector.begin(), myVector.end(), [](int a) {
cout << a << " ";
});
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
9 5 2 7
9 5 7 2
Press any key to continue . . .
三、反转序列算法 - reverse 函数
1、函数原型分析
在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 reverse 反转序列算法函数 用于 对容器中的元素进行 反转序列 ;
reverse 反转序列 函数 的 作用是 是 将序列 [first, last) 中的元素顺序颠倒 , 使得原来序列的第一个元素成为最后一个 , 原来序列的最后一个元素成为第一个 , 依此类推 ;
该算法函数 , 并不涉及到 排序操作 , 只是单纯的将 元素顺序 进行反转 ;
reverse 反转序列算法 函数原型 如下 :
template <class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last);
-
参数解析 :
- BidirectionalIterator first 参数 : 迭代器范围 的 起始迭代器 ( 包含该迭代器指向的元素 ) ;
- BidirectionalIterator last 参数 : 迭代器范围 的 终止迭代器 ( 不包含该迭代器指向的元素 ) ;
- 返回值解析 : 没有返回值 ;
2、代码示例
代码示例 :
#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"
int main() {
// 要随机排序的容器
vector<int> myVector{9, 5, 2, 7};
// 遍历打印容器中元素内容
for_each(myVector.begin(), myVector.end(), [](int a) {
cout << a << " ";
});
cout << endl;
// 倒序排序
reverse(myVector.begin(), myVector.end());
// 遍历打印容器中元素内容
for_each(myVector.begin(), myVector.end(), [](int a) {
cout << a << " ";
});
cout << endl;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
};
执行结果 :
9 5 2 7
7 2 5 9
Press any key to continue . . .文章来源:https://www.toymoban.com/news/detail-801724.html
文章来源地址https://www.toymoban.com/news/detail-801724.html
到了这里,关于【C++】STL 算法 - 排序算法 ( 合并排序算法 - merge 函数 | 随机排序算法 - random_shuffle 函数 | 反转序列算法 - reverse 函数 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!