【hoare优化版】快速排序算法(2)

目录

GitMidi三数取中

整体思想

图解分析

代码实现 

Hoare优化


上篇我们介绍了hoare基础版,但是这种代码存在缺陷,所以我们提出了两种解决方案。主流的解决方案就是【三数取中选key】

GitMidi三数取中

在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。在此我们采用三数取中法,也就是取左端、中间、右端三个数的下标,然后进行排序,将中间数作为枢纽值。 

  • 取的三个数的中位数的下标
  • 取的是下标❗
  • 数值两两比较

整体思想

  • 设置三个值下标:begin // end // midi
  • 两个两个比较
  • 得到中位数的下标

图解分析

【顺序序列优化前:等差数列O(N^2)】 

 【顺序序列优化后:类似二叉树等比数列O(N*logN)

代码实现 

//三数取中
int GetMidi(int* a, int begin, int end)
{int midi = (begin + end) / 2;if (a[begin] < a[end]){if (a[begin] > a[midi]){return begin;}else if(a[end]<a[midi]){return end;}else{return midi;}}else//begin>=end{if (a[midi] < a[end]){return end;}else if (a[midi] > a[begin]){return begin;}else{return midi;}}
}

Hoare优化

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}//三数取中
int GetMidi(int* a, int begin, int end)
{int midi = (begin + end) / 2;if (a[begin] < a[end]){if (a[begin] > a[midi]){return begin;}else if(a[end]<a[midi]){return end;}else{return midi;}}else//begin>=end{if (a[midi] < a[end]){return end;}else if (a[midi] > a[begin]){return begin;}else{return midi;}}
}//优化版本
int PartSort1(int* a, int begin, int end)//返回分割线
{int left = begin;int right = end;int keyi = begin;//三数取中int midi = GetMidi(a, begin, end);Swap(&a[keyi], &a[midi]);while (left < right){//找小while (left < right && a[right] >= a[keyi]){right--;}//找大while (left < right && a[left] <= a[keyi]){left++;}//找到了Swap(&a[right], &a[left]);}Swap(&a[left], &a[keyi]);keyi = left;return keyi;//分割 [begin,keyi-1] keyi [keyi+1,end]
}void QuickSort(int* a, int begin,int end)
{if (begin >= end)//只有1个元素 没有区间{return;}int keyi = PartSort1(a, begin, end);QuickSort(a, begin, keyi - 1);QuickSort(a, keyi + 1, end);
}

🙂感谢大家的阅读,若有错误和不足,欢迎指正。

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

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

相关文章

三次样条函数插值(Cubic spline function interpolation)

文章目录 定义具体分析龙格现象样条函数分析代码参考文献定义 已知部分离散的数据,但不知道满足这些数据的函数表达式,插值(和拟合)都是为了找到对应的函数表达式。区别在于,插值函数能够穿过已知点,拟合只求函数图形神似而不求穿过已知点。 具体分析 所谓插值,就是要…

基于java jsp+mybatis+Spring+的SSM二手交易网站设计实现

基于java jspmybatisSpring的SSM二手交易网站设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获…

智慧医疗的未来:从源码到实用的互联网医院APP开发

众所周知&#xff0c;传统医院看病需要排队、候诊时间长、挂号不便等问题日益凸显&#xff0c;而互联网医院APP的出现为解决这些问题提供了全新的途径。通过互联网医院APP&#xff0c;患者极大地提高了就医效率和体验。 一、互联网医院APP的功能与特点 互联网医院APP作为一种创…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0] w torch.tensor([1.0]) w.requires_grad Truedef forward(x):return x*wdef loss(x,y):y_pred forward(x)return (y_pred-y)**2…

高维数据的中介效应【中介分析】《R包:HIMA》

允许基于高级中介筛选和惩罚回归技术来估计和测试高维中介效应 Hima包浏览 高维中介示意图 图1. 在暴露和结果之间有高维中介的情况 本包的作用 在确定独立筛选和极小极大凹惩罚技术的基础上&#xff0c;采用联合显著性检验方法对调解效果进行检验。使用蒙特卡罗模拟研究来展…

六、回归与聚类算法 - 线性回归

目录 1、线性回归的原理 1.1 应用场景 1.2 什么是线性回归 1.2.1 定义 1.2.2 线性回归的特征与目标的关系分析 2、线性回归的损失和优化原理 2.1 损失函数 2.2 优化算法 2.2.1 正规方程 2.2.2 梯度下降 3、线性回归API 4、回归性能评估 5、波士顿房价预测 5.1 流…

Linux系统——nginx服务介绍

一、Nginx——高性能的Web服务端 Nginx的高并发性能优于httpd服务 1.nginx概述 Nginx是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的&#xff0c;开发工作最早从2002年开始&#xff0c;第一次公开发布时间是2004年10月4日&#xff0c;版本…

vue+django+python办公耗材网上商城采购库存管理系统

办公耗材采购信息管理是信息行业业务流程过程中十分重要且必备的环节之一&#xff0c;在信息行业业务流程当中起着承上启下的作用&#xff0c;其重要性不言而喻。但是&#xff0c;目前许多信息行业在具体的业务流程处理过程中仍然使用手工操作的方式来实施&#xff0c;不仅费时…

Java,SpringBoot项目中,Postman的测试方法。

目录 展示查询搜索 根据id展示数据 根据id删除数据 根据id更新数据 添加数据 展示查询搜索 // 根据姓名分页查询用户GetMapping("/getUsersByName")public IPage<User> getUsersByName(RequestParam(defaultValue "1") Long current,RequestPar…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg

1、eps转pdf 直接使用epstopdf命令&#xff08;texlive、mitex自带&#xff09;。 在cmd中进入到eps矢量图片的目录&#xff0c;使用下面的命令&#xff1a; for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码&#xff1a; import matplotlib.pyplot as…

25-k8s集群中-RBAC用户角色资源权限

一、RBAC概述 1&#xff0c;k8s集群的交互逻辑&#xff08;简单了解&#xff09; 我们通过k8s各组件架构&#xff0c;指导各个组件之间是使用https进行数据加密及交互的&#xff0c;那么同理&#xff0c;我们作为“使用”k8s的各种资源&#xff0c;也是通过https进行数据加密的…

不仅仅是装饰——发现那些能够触动你灵魂的壁纸!

1、方小童在线工具集 网址&#xff1a; 方小童 该网站是一款在线工具集合的网站&#xff0c;目前包含PDF文件在线转换、随机生成美女图片、精美壁纸、电子书搜索等功能&#xff0c;喜欢的可以赶紧去试试&#xff01;