c++的排序算法

一:merge 是 C++ STL 中的一个算法函数,用于将两个已排序的序列合并成一个有序序列。

template<class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator merge(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp);

功能:

将两个已排序的范围 [first1, last1)[first2, last2) 合并到范围 [result, result + (last1 - first1) + (last2 - first2)) 中,使用比较器 comp 进行元素的比较。

返回值:

返回指向存储结果的范围的尾后迭代器 result + (last1 - first1) + (last2 - first2)

cpp 复制代码
//merge算法,容器元素合并,存储到另一个容器
// merge 函数只能将两个有序的范围合并成一个有序的范围,而不能自动对合并后的范围进行排序

void test01()
{
	vector<int>v1;
	vector<int>v2;
	/*for (int i = 0; i < 5; i++)
	{
		v1.push_back(i + 1);
		v2.push_back(i + 2);
	}*/
	for (int i = 5; i >=0; i--)
	{
		v1.push_back(i + 1);
		v2.push_back(i + 2);
	}
	vector<int>v3;
	v3.resize(v1.size() + v2.size());
	//如果数据是升序,那么第六个参数不用写
	//merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());
	//如果数据是降序,那么第六个参数写great<int>()
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin(),greater<int>());
	for_each(v3.begin(), v3.end(), [](int val)->void {cout << val << " "; });
	
}

二:sort 是 C++ STL 中的一个算法函数,用于对指定范围内的元素进行排序。

函数原型:

复制代码

cpp复制代码

template<class RandomAccessIterator> void sort(RandomAccessIterator first, RandomAccessIterator last); template<class RandomAccessIterator, class Compare> void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);

功能:

对范围 [first, last) 内的元素进行排序。

返回值:

无。

cpp 复制代码
//sort算法
struct mysort
{
	bool operator()(int v1, int v2)
	{
		return v1 > v2;
	}
};
void test02()
{
	vector<int>v = { 2,35,634,523 };
	sort(v.begin(), v.end(),mysort());
	for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}

random_shuffle 是 C++ STL 中的一个算法函数,用于对指定范围内的元素进行乱序排列。

template<class RandomAccessIterator> void random_shuffle(RandomAccessIterator first, RandomAccessIterator last); template<class RandomAccessIterator, class RandomNumberGenerator> void random_shuffle(RandomAccessIterator first, RandomAccessIterator last, RandomNumberGenerator&& gen);

功能:

对范围 [first, last) 内的元素进行随机乱序。

返回值:

无。

cpp 复制代码
//random_shuffle 乱序
void test03()
{
	srand((unsigned int)time(NULL));
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i + 1);
	}
	for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
	cout << endl;
	random_shuffle(v.begin(), v.end());
	for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}

reverse 是 C++ STL 中的一个算法函数,用于反转指定范围内的元素顺序。

template<class BidirectionalIterator> void reverse(BidirectionalIterator first, BidirectionalIterator last);

功能:

对范围 [first, last) 内的元素进行反转。

返回值:

无。

cpp 复制代码
//reverse 反转指定范围元素
void test04()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i + 1);
	}
	for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
	cout << endl;
	reverse(v.begin(), v.end());
	for_each(v.begin(), v.end(), [](int val)->void {cout << val << " "; });
}
相关推荐
神仙别闹1 小时前
基于 C++ 实现两个有序链表序列的交集
java·c++·链表
hansang_IR3 小时前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
落羽的落羽4 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生4 小时前
Linux-进程控制
linux·运维·服务器·c++
刃神太酷啦4 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
喜欢吃燃面7 小时前
深入 C++ STL:从 unordered_set与unordered_map到底层哈希表的原理与实现
数据结构·c++·散列表
FlightYe8 小时前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
ShineWinsu8 小时前
对于MySQL:数据库的操作的解析
linux·数据库·c++·mysql·面试·笔试·库的操作
云小逸9 小时前
C++ 第一阶段:对象、内存与生命周期
开发语言·c++
夜航海图9 小时前
S-57 数据解剖:把一个 ENC 文件拆给你看
c++