归并排序(简单易懂的代码)

2023-11-09

归并排序是一种很重要的排序算法,体现的是分而治之的思想,很多的算法题的解法会借用这种算法思想,在这里使用C++编程实现归并排序,供自己回忆,供他人参考~

#include <bits/stdc++.h>
using namespace std;

// 合并(Merge)
void merge(vector<int> &vec, int start, int mid, int end) {
	vector<int> temp;  // 用来保存二路归并的临时结果
	int i = start, j = mid + 1;
	// 二路归并
	while (i <= mid && j <= end) {
		if (vec[i] < vec[j]) {
			temp.push_back(vec[i++]);
		} else {
			temp.push_back(vec[j++]);
		}
	} 
	// 处理剩余的
	while (i <= mid) temp.push_back(vec[i++]);
	while (j <= end) temp.push_back(vec[j++]);
	//重新赋值回去
	for (int k = 0; k < temp.size(); k++) {
		vec[start + k] = temp[k];
	} 
}
 
// mergeSort
void mergeSort(vector<int> &vec, int start, int end) {
	// 递归出口
	if (vec.empty() || start >= end) {
		return;
	}
	// 二分 
	int mid = start + (end - start) / 2;
	// 递归
	mergeSort(vec, start, mid);
	mergeSort(vec, mid + 1, end);
	// 归并
	merge(vec, start, mid, end); 
}

int main() {
	// 初始化一个待排序的向量 
	vector<int> vec = {1, 8, -6, 12, 5, 9};
	// 调用自己写的快排 
	mergeSort(vec, 0, vec.size() - 1);
	// 打印出排序之后的结果 
	for (auto x : vec) {
		cout << x << ",";  // -6,1,5,8,9,12, 
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

归并排序(简单易懂的代码) 的相关文章

随机推荐

  • 3. Python使用shelve模块实现变量保存和加载恢复

    1 说明 Shelve模块是对象持久化保存方法 将对象保存到文件里面 缺省 即默认 的数据存储文件是二进制的 使用时 只需要使用open函数获取一个shelf对象 然后对数据进行增删改查操作 在完成工作 并且将内存存储到磁盘中 最后调用cl
  • 蓝桥杯2014年第五届真题-兰顿蚂蚁

    目录 题目描述 输入格式 输出格式 样例输入 样例输出 原题链接 题目分析 题目代码 时间限制 3s 内存限制 192MB 提交 7430 解决 3440 题目描述 兰顿蚂蚁 是于1986年 由克里斯 兰顿提出来的 属于细胞自动机的一种 平
  • 如何解决 conda install 库时报错:The environment is inconsistent, please check the package plan carefully

    在使用conda 安装库时 遇到了这样的问题 无论怎么安装都无法解决上述问题 本着可能是源的问题以及哪一步安装版本的问题 调试了一通后 解决了安装库失败的问题 首先是恢复默认源 恢复默认源 conda config remove key c
  • 计算机环境变量怎么恢复默认,windows10系统中环境变量怎么恢复默认

    有不少windows10系统用户在设置环境变量之后 可能不小心被恶意修改了导致出现问题 那么我们只需要将环境变量恢复默认即可 那么该怎么操作呢 本文就给大家讲解一下windows10系统中环境变量恢复默认的具体步骤如下 组策略编辑器中的MM
  • 以太坊智能合约虚拟机(EVM)原理与实现

    以太坊 EVM原理与实现 以太坊底层通过EVM模块支持合约的执行与调用 调用时根据合约地址获取到代码 生成环境后载入到EVM中运行 通常智能合约的开发流程是用solidlity编写逻辑代码 再通过编译器编译元数据 最后再发布到以太坊上 代码
  • 2023最新STM32毕业设计项目集合

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 4 最后 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下
  • Shiro权限框架-限制密码重试次数(8)

    1 实现原理 保证原子性 单系统 AtomicLong计数 集群系统 RedissionClient提供的RAtomicLong计数 1 获取系统中是否已有登录次数缓存 缓存对象结构预期为 用户名 登录次数 2 如果之前没有登录缓存 则创建
  • 【ElementUI样式优化1】el-table 修改斑马格样式、修改滚动条样式、添加表头边框、删除表格边框划线

    重要的不是过去 而是你怎末看待过去 而我们对过去的看法 是可以改变的 效果预览 1 删除表格外框 内框 2 添加表头边框 修改表头文字大小 颜色 3 斑马格修改颜色 选中行高亮颜色修改 4 修改滚动条样式 目录 一 原始样式说明 1 斑马纹
  • 试用许可常见问题解析

    从安装许可驱动 到正确配置试用许可 大家可能会遇到的各种问题 本文针对各类问题逐一介绍以及使用产品过程中许可中心异常的解决办法 在SuperMap 7C及8C系列产品中 均使用是LicenseCenter来配置及管理所有产品的许可 在安装i
  • husky无法工作 commit 提交代码时husky不生效解决方法

    husky无法工作原因 新版本 husky 中存在严重错误 https github com typicode husky issues 326 解决方法 安装低版本即可 yarn remove husky yarn add husky 4
  • Linux:C语言实现面向接口编程

    在Linux环境下 实现面向接口编程可以使用C语言中的函数指针来实现 具体步骤如下 定义接口 定义一个接口 包含一组函数指针 这些函数指针代表了该接口的方法 例如 我们可以定义一个名为 Interface 的接口 cCopy code ty
  • flow对性能的影响

    不同高中低端ROUTER 其netflow处理性能果然相差很大低端10000f s是极限 中端40000f s 高端60000f s 且还有simpled这个杀手锏 低端ROUTER 2600 2800 3600 3700 来说 采集100
  • 使用Python爬取前程无忧上南京地区Python职位以及对应工资

    获取原始数据 最近在学习Python 做了一个爬虫程序练练手 前程无忧这个网站页面布局还是挺简单的 适合我这种新手 使用requests bs4爬取 不多说了 先来看看页面布局吧 这是前程无忧上的职位列表 看上去还是很清楚的 然后再来看看页
  • systemctl start network 启动网卡服务报错解决方法

    systemctl start network 启动网卡服务报错 root apache systemctl restart network Job for network service failed because the contro
  • Hibernate之查询中get()和load()的区别,list()和iterate()的区别

    Hibernate 之查询中get 和load 的区别 list 和iterate 的区别 list 查询 一次性把数据对象取出来 Test public void findTestList Session s sessionFactory
  • python3 面试题总结

    Python global 语句的作用 lambda 匿名函数好处 Python 错误处理 Python 内置错误类型 简述 any 和 all 方法 Python 中什么元素为假 提高 Python 运行效率的方法 Python 单例模式
  • LeetCode63. 不同路径 II

    不同路径 II 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 现在考虑网格中有障碍物 那么从左上角到右下角将会有
  • Halcon三维模型预处理(1):调平的三大手法

    面结构光拍摄生成的点云模型 往往相对系统坐标系是有角度的 首先讲一下调平的目的 1 为接下来的预处理切除背景面做准备 3 不做调平 后续处理会很麻烦 因为不清楚坐标系在平台的为位置 2 对于无序抓取项目 平台相对相机可能是有角度的 将抓取平
  • socket和mongodb

    socket 创建一个socket 然后连接server url net Socket 发送信息给服务器 socket通信 client可以进行数据的编写和发送 服务器 只有一个 只有开启了服务器 客户端才能进行连接 mongodb 关系型
  • 归并排序(简单易懂的代码)

    归并排序是一种很重要的排序算法 体现的是分而治之的思想 很多的算法题的解法会借用这种算法思想 在这里使用C 编程实现归并排序 供自己回忆 供他人参考 include