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

文章目录

    • 遍历算法
      • 1. sort()
        • 代码工程
        • 运行结果
      • 2. random_shuffle()
        • 代码工程
        • 运行结果
          • 第一次运行结果
          • 第二次运行结果
          • 第三次运行结果
      • 3. merge()
        • 代码工程
        • 运行结果
      • 4. reverse()
        • 代码工程
        • 运行结果

遍历算法

1. sort()

代码工程
sort()函数默认是升序排列,如果想要降序排列需要添加一个函数或者仿函数。
#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()

random_shuffle()函数是一个打乱容器元素排列的一种算法,俗称“洗牌”算法;
从运行的三次结果可以看出,每次打乱的顺序都是不一样的;
需要注意的是如果你没有添加随机种子,那么每次运行的结果都是一样的。
代码工程
#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()

将两个容器的元素合并到另一个容器中;
需要注意的是目标容器需要开辟空间,开辟空间的大小为两个融合容器中元素个数之和。
代码工程
#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()

将容器中的元素进行反转
代码工程
#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;
}
运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/624546.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a == 1 a== 2 a== 3 返回 true ?

1. 前言 下面这道题是 阿里、百度、腾讯 三个大厂都出过的面试题&#xff0c;一个前端同事跳槽面试也被问了这道题 // &#xff1f; 位置应该怎么写&#xff0c;才能输出 trueconst a ?console.log(a 1 && a 2 && a 3) 看了大厂的面试题会对面试官的精神…

Vue 阶段练习:记事本

将 Vue快速入门 和 Vue 指令的学习成果应用到实际场景中&#xff08;如该练习 记事本&#xff09;&#xff0c;我们能够解决实际问题并提升对 Vue 的技能掌握。 目录 功能展示 需求分析 我的代码 案例代码 知识点总结 功能展示 需求分析 列表渲染删除功能添加功能底部统计…

怎么清除3D模型杂质?---模大狮模型网

在进行3D建模过程中&#xff0c;模型可能会受到各种杂质的影响&#xff0c;这些杂质可能来自于模型本身的结构问题、导入导出过程中的错误、或者是不当的编辑操作所留下的痕迹。清除这些杂质是保证模型质量和渲染效果的关键步骤之一。本文将介绍几种常见的清除3D模型杂质的方法…

总结 HashTable, HashMap, ConcurrentHashMap 之间的区别

前言 HashMap 本身不是线程安全的. 在多线程环境下使用哈希表可以使用: Hashtable&#xff08;不推荐使用&#xff09;ConcurrentHashMap&#xff08;推荐使用&#xff09; HashMap HashMap数据结构 根本&#xff1a; 数组 链表&#xff08;jdk1.7&#xff09;/数组链表红黑…

【学习笔记】rt-thread

任务 创建好任务&#xff0c;不管是动态还是静态创建&#xff0c;任务的状态是init &#xff0c;通过start方法来启动任务&#xff1b;线程大小 设置小了&#xff0c;无法正常工作&#xff1f;显示占空间100% 启动过程 TODO 这是编译器特性&#xff1f; 因为RT-Thread使用编…

动态规划算法求解最长公共子序列

动态规划算法是运筹学中求解多阶段决策问题的经典算法&#xff0c;本文将介绍动态规划算法的基本思想&#xff0c;并介绍如何使用动态规划算法求解最长公共子序列问题。 1. 动态规划算法的基本思想 动态规划算法本质也是基于分治思想&#xff0c;将待求解问题分解成若干个子问…

13.继承(基类、派生类、同名函数、同名变量、虚拟继承、虚拟继承的原理、继承关系和访问限定符)

1.继承的概念及定义 1.1继承的概念 ​ 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的…

区块链知识总结——以太坊的账户

账户分类 在以太坊中&#xff0c;账户是参与交易和执行智能合约的基本单位。以太坊账户分为两种类型&#xff1a;外部账户&#xff08;Externally Owned Account&#xff09;和合约账户&#xff08;Contract Account&#xff09;。 外部账户&#xff08;Externally Owned Acc…

数据库讲解---(数据更新、视图、数据控制)【MySQL版本】

目录 前言 一.数据更新 1.1插入数据 1.1.1插入单个元组 1.1.2将一个新学生记录(学号:091530,姓名:夏雨,性别:男,籍:海南,出生年份:1999,学院:计算机)插入到学生表中 1.1.3插入子查询结果 1.1.4有一个表“DEPT”(SDEPT CHAR(20),AVG_AGE SMALLINT)表示每个学院的学生的平…

2.2 iHRM人力资源 - 主页权限认证、Vux共享用户资料

iHRM人力资源 - 主页权限认证、主页内容展示 2.IHRM人力资源 - 登录-CSDN博客 文章目录 iHRM人力资源 - 主页权限认证、主页内容展示一、主页权限认证1.1 主页权限认证分析1.2 主页权限认证 - permission.js1.2.1 进度条部分1.2.2 token 认证 二、Vuex共享用户资料2.1 需求分析…

深入理解大语言模型微调技术

一、概念解析 1、什么是微调&#xff08;Fine-tuning&#xff09;&#xff1f; 大模型微调&#xff0c;也称为Fine-tuning&#xff0c;是指在已经预训练好的大型语言模型基础上&#xff08;一般称为“基座模型”&#xff09;&#xff0c;使用特定的数据集进行进一步的训练&am…

【Delphi 爬虫库 1】GET和POST方法

文章目录 1.最简单的Get方法实现2.可自定义请求头、自定义Cookie的Get方法实现3.提取响应协议头4.Post方法实现单词翻译 爬虫的基本原理是根据需求获取信息并返回。就像当我们感到饥饿时&#xff0c;可以选择自己烹饪食物、外出就餐&#xff0c;或者订外卖一样。在编程中&#…