14.C++常用的算法_排序算法

文章目录

遍历算法

1. sort()

代码工程
c 复制代码
sort()函数默认是升序排列,如果想要降序排列需要添加一个函数或者仿函数。
c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

void printVector(const vector<int>&v)
{
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
}

class Greator
{
public:
	bool operator()(int v1, int v2)
	{
		return v1 > v2;
	}
};

void test01()
{
	vector<int>v;

	v.push_back(50);
	v.push_back(10);
	v.push_back(30);
	v.push_back(20);
	v.push_back(40);

	cout << "排序前: ";
	printVector(v);

	sort(v.begin(), v.end(), Greator());/*使用仿函数降序排列,不添加仿函数就是默认升序排列*/

	cout << "排序后: ";
	printVector(v);

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果

2. random_shuffle()

c 复制代码
random_shuffle()函数是一个打乱容器元素排列的一种算法,俗称"洗牌"算法;
从运行的三次结果可以看出,每次打乱的顺序都是不一样的;
需要注意的是如果你没有添加随机种子,那么每次运行的结果都是一样的。
代码工程
c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<ctime>
using namespace std;

class print
{
public:
	void operator()(int v)
	{
		cout << v << " ";
	}
};

void test01()
{
	/*根据时间生成一个随机种子*/
	srand((unsigned int)time(NULL));

	vector<int>v;

	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	v.push_back(50);

	cout << "打乱前: ";
	for_each(v.begin(), v.end(), print());

	/*将容器中的元素顺序打乱*/
	random_shuffle(v.begin(), v.end());

	cout << endl;

	cout << "打乱后: ";
	for_each(v.begin(), v.end(), print());

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果
第一次运行结果
第二次运行结果
第三次运行结果

3. merge()

c 复制代码
将两个容器的元素合并到另一个容器中;
需要注意的是目标容器需要开辟空间,开辟空间的大小为两个融合容器中元素个数之和。
代码工程
c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class print
{
public:
	void operator()(int v)
	{
		cout << v << " ";
	}
};

void test01()
{
	vector<int>v1;
	v1.push_back(10);
	v1.push_back(20);
	v1.push_back(30);

	vector<int>v2;
	v2.push_back(100);
	v2.push_back(200);
	v2.push_back(300);

	vector<int>vTarge;

	vTarge.resize(v1.size() + v2.size());

	/*将v1和v2容器的元素合并到vTarge容器中*/
	merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarge.begin());

	cout << "融合后: ";
	for_each(vTarge.begin(), vTarge.end(), print());

	cout << endl;

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果

4. reverse()

c 复制代码
将容器中的元素进行反转
代码工程
c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class print
{
public:
	void operator()(int v)
	{
		cout << v << " ";
	}
};

void test01()
{
	vector<int>v;
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);
	v.push_back(50);

	cout << "反转前: ";
	for_each(v.begin(), v.end(), print());

	cout << endl;
	/*反转容器中的元素*/
	reverse(v.begin(), v.end());

	cout << "反转后: ";
	for_each(v.begin(), v.end(), print());

	cout << endl;

	return;
}

int main()
{
	test01();

	return 0;
}
运行结果
相关推荐
zxctsclrjjjcph1 小时前
【高并发内存池】从零到一的项目之centralcache整体结构设计及核心实现
开发语言·数据结构·c++·链表
炯哈哈1 小时前
【上位机——MFC】单文档和多文档视图架构
开发语言·c++·mfc·上位机
利刃大大2 小时前
【网络编程】四、守护进程实现 && 前后台作业 && 会话与进程组
linux·网络·c++·网络编程·守护进程
oioihoii2 小时前
C++23 std::tuple与其他元组式对象的兼容 (P2165R4)
c++·链表·c++23
赵和范2 小时前
C++:书架
开发语言·c++·算法
龙湾开发4 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 05.纹理贴图
c++·笔记·学习·3d·图形渲染·贴图
yasuniko4 小时前
C++线程库
开发语言·c++
还有几根头发呀5 小时前
深入理解C/C++内存管理:从基础到高级优化实践
c++
zxctsclrjjjcph5 小时前
【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
开发语言·c++·算法·力扣
hallo-ooo6 小时前
【C/C++】范围for循环
c语言·c++