【归并排序】 详细解析 动图演示 逐图解析 洛谷P1177【模板】排序 sort【快速排序】

文章目录

    • 归并排序
      • 1.归并排序的复杂度分析
      • 2.细节解释
      • 3.归并排序动图演示
        • 3(1) 我们的拆分过程如下↓
      • 4.code↓
    • 洛谷P1177【模板】排序
      • 数据规模与约定
      • code(归并排序)↓
      • code(sort排序【快速排序】)
    • 完结撒花( ̄▽ ̄) /

归并排序

归并排序(merge sort)是高效的基于比较的稳定排序算法。

1.归并排序的复杂度分析

归并排序的时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

归并排序的空间复杂度 O ( n ) O(n) O(n)(这是因为他不是原地排序算法

2.细节解释

( l + r ) > > 1 = ( l + r ) ÷ 2 1 = ( l + r ) ÷ 2 (l+r)>>1=(l+r)\div 2^{1}=(l+r)\div 2 (l+r)>>1=(l+r)÷21=(l+r)÷2;

3.归并排序动图演示

在这里我们是默认了它以中间为节点分别排成了从大到小两个序列

这是因为有merge_sort(q,l,mid),merge_sort(q,mid+1,r)不断进行拆分的原因

3(1) 我们的拆分过程如下↓

在这里插入图片描述

这里的动图演示先执行了下方代码

	int k=0,i=l,j=mid+1;//i表示左半边的开始,j表示右半边的开始,k表示合并的个数while(i<=mid&&j<=r){//对半分后,mid是i的终点,r是j的终点if(q[i]<=q[j])  tmp[k++]=q[i++];//不断将tmp填充,i++else tmp[k++]=q[j++];//else 等同于if(q[i]>q[j]) }

q[i]q[j]已经超过了他们的终点i终点midj终点r),那么就执行下方代码

	while(i<=mid) tmp[k++]=q[i++];//将i没有填充完的继续进行填充while(j<=r) tmp[k++]=q[j++];//将j没有填充完的继续进行填充

执行上方代码时一定有一个值(i or j) 是已经超过了他们的终点的,不然不会退出循环,所以不用考虑大小关系

执行上方代码是为了将剩下的可以填充的数填充进tmp数组里,以此来保证没有遗漏

动图演示↓
在这里插入图片描述

4.code↓

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,a[maxn] ,tmp[maxn];
void merge_sort(int q[],int l,int r){//要排序的数组,左边界,有边界if(l>=r) return;//不满足要求int mid=(l+r)>>1;//m是l+r的中间值,(l+r)>>1=(l+r)/(2^{1})=(l+r)/2;merge_sort(q,l,mid),merge_sort(q,mid+1,r);//不断将它进行拆分,然后归并int k=0,i=l,j=mid+1;//i表示左半边的开始,j表示右半边的开始,k表示合并的个数while(i<=mid&&j<=r){//对半分后,mid是i的终点,r是j的终点if(q[i]<=q[j])  tmp[k++]=q[i++];//不断将tmp填充,i++else tmp[k++]=q[j++];//else 等同于if(q[i]>q[j]) }while(i<=mid) tmp[k++]=q[i++];//将i没有填充完的继续进行填充while(j<=r) tmp[k++]=q[j++];//将j没有填充完的继续进行填充for(int i=l,j=0;i<=r;i++,j++){q[i]=tmp[j];//将已经排好序的(tmp[l]~tmp[r])给赋值到q数组}
}
int main(){ios::sync_with_stdio(false);//加速cincin.tie(0),cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>a[i];//输入数列}merge_sort(a,0,n-1);//进行排序for(int i=0;i<n;i++){cout<<a[i]<<" ";//进行排好序了的进行输出}return 0;
}

洛谷P1177【模板】排序

题意:将读入的 N N N个数从小到大排序后输出

数据规模与约定

对于 20 % 20\% 20% 的数据,有 1 ≤ N ≤ 1 0 3 1 \leq N \leq 10^3 1N103

对于 100 % 100\% 100% 的数据,有 1 ≤ N ≤ 1 0 5 1 \leq N \leq 10^5 1N105 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1ai109

code(归并排序)↓

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,a[maxn] ,tmp[maxn];
void merge_sort(int q[],int l,int r){if(l>=r) return;int mid=(l+r)>>1;merge_sort(q,l,mid),merge_sort(q,mid+1,r);int k=0,i=l,j=mid+1;while(i<=mid&&j<=r){if(q[i]<=q[j])  tmp[k++]=q[i++];else tmp[k++]=q[j++];}while(i<=mid) tmp[k++]=q[i++];while(j<=r) tmp[k++]=q[j++];for(int i=l,j=0;i<=r;i++,j++){q[i]=tmp[j];}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>a[i];}merge_sort(a,0,n-1);for(int i=0;i<n;i++){cout<<a[i]<<" ";}return 0;
}

code(sort排序【快速排序】)

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,a[maxn]={};
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a,a+1+n);for(int i=1;i<=n;i++) cout<<a[i]<<" ";return 0;
}

完结撒花( ̄▽ ̄) /

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

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

相关文章

数据中台:数字中国战略关键技术实施

这里写目录标题 前言为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿&#xff0c;方法论体系更新与时俱进&#xff0c;紧跟时代热点深入6大行业&#xff0c;提炼实践精华大咖推荐&#xff0c;数字化转型必备案头书 前言 在数字中国这一国家战略的牵引下&#xff0…

基于springboot+vue的响应式企业员工绩效考评系统(源码+论文)

文章目录 前言 一、功能设计 1 普通员工功能 2 主管功能 3 系统管理员功能 4 评分标准功能 5 PC端与手机端 6 制图 二、功能实现 普通员工 1普通员工登录 2公告板块 3日志板块 主管 1主管登录 2公告板块 3日志板块 4绩效评分板块 5个人信息板块 系统管理员…

在 Linux 环境下安装 Kibana

目录 一、Kibana 是什么 二、在 Linux 环境下安装 Kibana 1、下载安装包 2、解压 3、修改 Kibana的配置文件 config/kibana.yml 4、启动 5、浏览器登录 Kibana 6、测试查询 一、Kibana 是什么 Kibana 是通向 Elastic 产品集的窗口。 它可以在 Elasticsearch 中对数据进…

品牌推广的两种飞轮:非酋飞轮与欧皇飞轮

在品牌推广的世界里&#xff0c;存在着两种截然不同的飞轮效应&#xff0c;我们称之为“非酋飞轮”与“欧皇飞轮”。这两种飞轮象征着品牌发展的两种不同路径和策略&#xff0c;而迅腾文化则以其独特的“繁”的原则&#xff0c;巧妙地将这两种飞轮结合&#xff0c;助力品牌形成…

Linux安装JumpServer并结合内网穿透实现公网访问本地服务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Kubernetes 学习总结(46)—— Pod 不停重启问题分析与解决

我们在做性能测试的时候&#xff0c;往往会发现我们的pod服务&#xff0c;频繁重启&#xff0c;通过kubectl get pods 命令&#xff0c;我们来逐步定位问题。 现象:running的pod&#xff0c;短时间内重启次数太多。 定位问题方法:查看pod日志 kubectl get event …

1、EmlogCms代码审计

一、SQL注入 1、后台标签删除处存在1处sql注入 漏洞条件 ● 漏洞url: http://emlog6.0.com/admin/tag.php?actiondell_all_tag ● 漏洞参数&#xff1a;tag[xx] ● 是否存在限制&#xff1a;无 ● 是否还有其他条件&#xff1a;actiondell_all_tag,token复现 POST /admin…

撸chatgpt3.5 api backend-api 对接wxbot

功能是实现 web 转api 对接wxbot用&#xff0c; 直接上代码&#xff0c; 1.获取wss url def get_register_websocket():# 请求头url "https://chat.openai.com/backend-api/register-websocket"payload {}headers {Authorization: Bearer eyJhbGxxxxxxxxxxxxx…

docker的网络配置

文章目录 1、网络模式1.1、bridge模式(默认模式)1.2、host模式 2、bridge模式3、自定义网络 1、网络模式 Docker在创建容器时有四种网络模式&#xff1a;bridge/host/container/none&#xff0c;bridge为默认不需要用–net去指定&#xff0c;其他三种模式需要在创建容器时使用…

案例介绍:汽车维修系统的信息抽取技术与数据治理应用(开源)

一、引言 在当今汽车产业的快速发展中&#xff0c;软件已经成为提升车辆性能、安全性和用户体验的关键因素。从车载操作系统到智能驾驶辅助系统&#xff0c;软件技术的进步正在重塑我们对汽车的传统认知。我有幸参与了一个创新项目&#xff0c;该项目专注于开发和集成先进的汽…

关于 svg path 路径坐标 精度误差问题

<svg width"2838.739990" height"2482.179932" viewBox"0 0 2838.74 2482.18" fill"none" xmlns"http://www.w3.org/2000/svg" xmlns:xlink"http://www.w3.org/1999/xlink"><path id"矢量 12"…

原理篇-- 定时任务xxl-job-服务端(admin)项目启动过程--JobRegistryHelper 初始化 (4)

文章目录 前言一、JobRegistryHelper 作用&#xff1a;二、JobRegistryHelper 源码介绍&#xff1a;2.1 初始化start() 方法&#xff1a;2.1.1 registryOrRemoveThreadPool 执行器注册和移除&#xff1a;2.1.2 registryMonitorThread 执行器注册监控线程&#xff1a; 2.2 toSto…

折线图实现柱状阴影背景的demo

这个是一个由官网的基础折线图实现的流程&#xff0c;将涉及到的知识点附上个人浅薄的见解&#xff0c;源码在最后&#xff0c;需要的可自取。 折线图 成果展示代码注解参数backgroundColordataZoomlegendtitlexAxisyAxisgridseries 源码 成果展示 官网的基础折线图&#xff…

猫耳语音下载(mediadown)

猫耳语音下载(mediadown) 一、介绍 猫耳语音下载,能够帮助你下载猫耳音频节目。如果你是会员,它还能帮你下载会员节目。 二、下载地址 下载:猫耳语音下载(mediadown) 百度网盘下载:猫耳语音下载(mediadown) 三、安装教程 将下载的文件解压到D:\xibinhui,D:\Pr…

Unity RectTransform·屏幕坐标转换

RectTransform转屏幕坐标 分两种情况 Canvas渲染模式为Overlay时&#xff0c;使用此方式 public Rect GetScreenCoordinatesOfCorners(RectTransform rt) {var worldCorners new Vector3[4];rt.GetWorldCorners(worldCorners);var result new Rect(worldCorners[0].x,world…

Manomotion 实现AR手势互动-解决手势无效的问题

之前就玩过 Manomotion &#xff0c;现在有新需求&#xff0c;重新接入发现不能用了&#xff0c;不管什么办法&#xff0c;都识别不了手势&#xff0c;我记得当初是直接调用就可以的。 经过研究发现&#xff0c;新版本SDK改了写法。下边就写一下新版本的调用&#xff0c;并且实…

好书推荐 《Excel函数与公式应用大全for Excel 365 Excel 2021》

一.基本介绍 1.什么是 Excel? Excel 是微软公司开发的一款电子表格软件&#xff0c;是 Microsoft Office 套件的一部分。它被广泛用于数据处理、分析、可视化和管理等方面。Excel 提供了丰富的功能&#xff0c;使用户能够创建、编辑、存储和分享各种类型的数据表格。 2.Exc…

Golang Channel 详细原理和使用技巧

1.简介 Channel(一般简写为 chan) 管道提供了一种机制:它在两个并发执行的协程之间进行同步&#xff0c;并通过传递与该管道元素类型相符的值来进行通信,它是Golang在语言层面提供的goroutine间的通信方式.通过Channel在不同的 goroutine中交换数据&#xff0c;在goroutine之间…

代码随想录Day66 | 图的DFS与BFS

代码随想录Day66 | 图的DFS与BFS DFS797.所有可能的路径无向图和有向图的处理 BFS200.岛屿数量 DFS 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 状态 本质上就是回溯算法。 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本节点所连接的…

Qt textBrowser的Html相关

Qt textBrowser的Html相关 Qt textBrowser的Html相关 Qt textBrowser的Html相关 一开始就想要一个简单的功能&#xff0c;点一下按钮&#xff0c;添加的文字居中显示&#xff0c;再点一下按钮&#xff0c;添加的文字变更颜色居右显示。 但是&#xff1a; ui->textEdit-&g…