上机4-快排和归并
1快速排序思想分治思想步骤1.确定分界点通常选q[l]q[(lr)/2]q[r]或者也可以随机一个位置。2.调整区间对于升序排序就是将小于分界点值的元素放到分界点左边大于的放到右边从而划分为左右两个区间。3.递归处理左右两边区间。Acwing 785.快速排序给定你一个长度为 n 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行第一行包含整数 n。第二行包含 n 个整数所有整数均在 1∼109 范围内表示整个数列。输出格式输出共一行包含 n 个整数表示排好序的数列。数据范围1≤n≤100000输入样例5 3 1 2 4 5输出样例1 2 3 4 5王道计算机版本的代码使用首元素作为分界点但是过不去这道题的所有样例/*快速排序王道版本代码 两个函数quicksort和partition quicksort用于左右递归partition用于划分其中一趟排序 */ int q[N];//用于存放输入数据 int n; int partition(int l,int r)//对当前区间调整调整结束后返回基准值最终下标 { //进行划分 int pxq[l];//选第一个元素作为基准值 while(lr) { while(lrq[r]px) r--; q[l]q[r]; while(lrq[l]px) l; q[r]q[l]; } //将基准值放入最终位置 q[l]px; return l; } void quickSort(int l, int r) { if(lr) return;//只有一个元素或者区间不合法时 int pivotpartition(l,r); //对基准值下标左右两侧的闭区间继续递归调整 quickSort(l,pivot-1); quickSort(pivot1,r); }代码思路使用中间值作为分界点/*快速排序 acwing版本使用中间元素作为分界点 */ #include iostream #include cstring #include algorithm using namespace std; const int N100005; int q[N];//用于存放输入数据 int n; void quick_sort(int l,int r) { if(lr) return; int xq[(lr)/2]; int il-1,jr1; while(ij) { do i; while(q[i]x); do j--; while(q[j]x); if(ij) swap(q[i],q[j]); } quick_sort(l,j); quick_sort(j1,r); } int main() { cinn; for(int i0;in;i) cinq[i]; quick_sort(0,n-1); for(int i0;in;i) coutq[i] ; return 0; }(2)归并排序思想每次将两个有序的序列合并成一个有序的序列步骤先分别左右递归到最底层再归并每一层归并结束后再返回上一层。需要开辟一个O(n)的辅助空间时间复杂度为O(nlogn)Acwing 787.归并排序给定你一个长度为 n 的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行第一行包含整数 n。第二行包含 n 个整数所有整数均在 1∼109 范围内表示整个数列。输出格式输出共一行包含 n 个整数表示排好序的数列。数据范围1≤n≤100000输入样例5 3 1 2 4 5输出样例1 2 3 4 5代码思路#include iostream #include algorithm #include cstring using namespace std; const int N100005; int a[N],n; int tmp[N];//辅助空间 void merge_sort(int l,int r) { if(lr) return; int mid(lr)/2; merge_sort(l,mid);//递归左边 merge_sort(mid1,r); int il,jmid1; int k0; while(imidjr) { if(a[i]a[j]) tmp[k]a[i]; else tmp[k]a[j]; } while(imid) tmp[k]a[i]; while(jr) tmp[k]a[j]; //将合并后的序列放回原位置 for(int il,j0;ir;i,j) a[i]tmp[j]; } int main() { cinn; for(int i0;in;i) cina[i]; merge_sort(0,n-1); for(int i0;in;i) couta[i] ; return 0; }归并排序经典用法是求逆序对的数量Acwing 788.逆序对的数量给定一个长度为 n 的整数数列请你计算数列中的逆序对的数量。逆序对的定义如下对于数列的第 i 个和第 j 个元素如果满足 ij 且 a[i]a[j]则其为一个逆序对否则不是。输入格式第一行包含整数 n表示数列的长度。第二行包含 n 个整数表示整个数列。输出格式输出一个整数表示逆序对的个数。数据范围1≤n≤100000数列中的元素的取值范围 [1,1e9]。输入样例6 2 3 4 5 6 1输出样例5代码思路/*逆序对的数量 在归并排序合并升序序列的过程中对于左右两个升序序列 如果l[i]r[j]那么l[i1]...l[mid]肯定都大于r[j]也就相当于这些l的元素都和r[j]形成一次逆序对 这种情况就需要计数一次。 所以对整个排序过程中的逆序对出现情况进行计数最后输出结果 */ #include iostream #include cstring #include algorithm using namespace std; const int N100005; int a[N],n; long long cnt0;//注意逆序对可能会有很多这里要用longlong定义计数器 int tmp[N]; void merge_sort(int l,int r) { if(lr) return; int mid(lr)/2; merge_sort(l,mid); merge_sort(mid1,r); int il,jmid1; int k0; while(imidjr) { if(a[i]a[j])//这种情况前后不构成逆序对 tmp[k]a[i]; else//这种情况,a[i]~a[mid]都与a[j]构成逆序对 { cnt(mid-i1);//计数逆序对数量 tmp[k]a[j]; } } while(imid) tmp[k]a[i]; while(jr) tmp[k]a[j]; for(int il,j0;ir;i,j) a[i]tmp[j]; } int main() { cinn; for(int i0;in;i) cina[i]; merge_sort(0,n-1); coutcntendl; return 0; }

相关新闻

pdf书籍目录添加

pdf书籍目录添加

文章目录前言目录截图提取目录添加目录前言 学习过程中经常需要查阅电子书。一些pdf书籍没有将目录设置为书签,不方便根据查询内容跳转和查找资料。书签目录的制作可通过目录页截图,文字提取,并添加至书签实现。 目录截图 各种截图软件&am…

2026/7/4 18:25:58 阅读更多 →
打工人2026年工作更智能!零基础腾讯云OpenClaw(Clawdbot)极速集成教程

打工人2026年工作更智能!零基础腾讯云OpenClaw(Clawdbot)极速集成教程

打工人2026年工作更智能!零基础腾讯云OpenClaw(Clawdbot)极速集成教程。OpenClaw是什么?OpenClaw能做什么?OpenClaw怎么部署?OpenClaw(前身为Clawdbot/Moltbot)作为开源、本地优先的…

2026/7/5 8:47:22 阅读更多 →
re.findall(“\d“,‘123fg65h)与re.findall(r“\d“,‘123fg65h‘)的区别

re.findall(“\d“,‘123fg65h)与re.findall(r“\d“,‘123fg65h‘)的区别

re.findall("\d",123fg65h)与re.findall(r"\d",123fg65h)的区别一、普通字符串 vs 原始字符串(r 前缀)普通字符串(不带 r):Python 会先解析字符串内部的转义字符(比如\n代表换行、\t代…

2026/7/6 1:40:15 阅读更多 →

最新新闻

嵌入式电压管理:高精度检测与实时处理方案

嵌入式电压管理:高精度检测与实时处理方案

1. 嵌入式电压管理的核心挑战与选型思路在工业控制和精密仪器领域,电压管理从来都不是简单的"有电没电"问题。我经历过一个典型的案例:某自动化生产线上的传感器阵列,因为供电电压存在0.3V的波动,导致采集数据出现系统性…

2026/7/6 22:49:47 阅读更多 →
GPT-4V 多模态美学分析:从婚礼照片到哈勃影像的 3 种情感计算路径

GPT-4V 多模态美学分析:从婚礼照片到哈勃影像的 3 种情感计算路径

GPT-4V多模态美学计算:从婚礼影像到宇宙图像的三种情感解析方法1. 多模态情感计算的底层架构婚礼照片中父亲眼中的泪光与哈勃望远镜拍摄的星云,看似毫不相关的两种视觉刺激,却能唤起人类相似的情感共鸣。这种跨场景的美学体验背后&#xff0c…

2026/7/6 22:45:43 阅读更多 →
口碑好的芯片测试治具设计公司

口碑好的芯片测试治具设计公司

在芯片测试领域,选择一个口碑好的测试治具设计公司至关重要。今天我们就来深入探讨一下深圳市鸿怡电子有限公司(简称HMILU)。一、鸿怡电子的优势丰富的产品种类鸿怡电子研发、生产各类封装的半导体芯片测试座、老化座、测试夹具治具等。其产品…

2026/7/6 22:45:43 阅读更多 →
Audacity音频编辑完全指南:新手必学的7大实战技巧

Audacity音频编辑完全指南:新手必学的7大实战技巧

Audacity音频编辑完全指南:新手必学的7大实战技巧 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 想象一下,你刚录制了一段重要的访谈,却发现背景噪音大得听不清对话&#xff1…

2026/7/6 22:41:30 阅读更多 →
OpenRocket:如何用开源软件设计你的第一枚模型火箭?

OpenRocket:如何用开源软件设计你的第一枚模型火箭?

OpenRocket:如何用开源软件设计你的第一枚模型火箭? 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket OpenRocket是一款功能完整的开…

2026/7/6 22:39:29 阅读更多 →
Cline AI:轻量级CLI智能代理框架,面向任务自动化的YAML驱动方案

Cline AI:轻量级CLI智能代理框架,面向任务自动化的YAML驱动方案

1. 项目概述:这不是又一个AI玩具,而是一套可嵌入工作流的轻量级智能代理框架“Cline AI”这个名字乍一听容易被误认为是某个大厂新推的闭源SaaS产品,或是某款带UI的AI聊天App。但实际接触过它的开发者很快会意识到:它根本不是面向…

2026/7/6 22:37:28 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻