当前位置: 首页 > news >正文

快速排序笔记

一、quick_sort方法中如果 i=l,j=r 会死循环的分析

1、示例代码

void quick_sort(int a[],int l,int r){if(l>=r) return;int i=l,j=r; //此处设置会导致死循环int x = num[(l+r)>>1];while(i<j){while(a[++i] <x); //死循环的地方while(a[--j] >x);if(i<j) swap(a[i],a[j]);}quick_sort(a,l,j);quick_sort(a,j+1,r);
}

2、代码分析

因为数组a默认值都是,i的坐标越过了选中的数x ,并且x往后的数都小于0或者没有明确赋值(此种情况为0)此后a[i]的值都会小于x,导致死循环。而
while(a[--j] >x); 就不会导致因为j往左移终究会变成没有明确赋值的0,所以循环会结束。

3、示例

假如就两个数 98 97,i=1(值97,i坐标往右移动,值变成0,始终小于选出来的数98,导致死循环)

4、心得

算法当中有很多默认值的地方,比如此处的数组a的未明确下标的值都为0,为一个隐含条件,可以帮忙判断是否发生死循环。

二、无限划分的分析

1、重要结论

当以i划分区间,选数不能选到左边界,则a[x] = a[(L+R+1)>>1]
当以j划分区间,选数不能选到右边界,则a[x]=a[(L+R)>>1]

2、逻辑分析

假设选的数是a[x] ,退出循环时,a[l] …a[i-1] 都是a[x];a[j+1]…a[r] 都是>x,a[j]<a[x][x],a[i]>
image-20230826164400548

3、示例

以3 1 2 5 4 这个五个数排序为例:
image-20230826161149245

4、心得

退出循环时的条件判断,有些退出循环时的条件很明确,比如以i划分,选数为L时,退出循环时i=L,但是j就不确定,只能是比L小的某一个位置。对于明确的位置是算法中一些重要判断的条件。

http://www.lryc.cn/news/140937.html

相关文章:

  • JAVA:(JSON反序列化Long变成了Integer)java.lang.Integer cannot be cast to java.lang.Long
  • ui设计师简历自我评价(合集)
  • Nginx 反向代理
  • [论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks
  • iview时间控件 动态不可选日期 可选择24小时范围内 时间往后退24小时
  • Rest学习环境搭建:服务消费者
  • JVM内存模型介绍
  • 2000-2021年地级市产业升级、产业结构高级化面板数据
  • Java实现密码加密实现步骤【bcrypt算法】
  • 商城-学习整理-集群-K8S(二十三)
  • MATLAB算法实战应用案例精讲-【深度学习】强化学习
  • 时间和日期--Python
  • 【Git】学习总结
  • 手写Spring源码——实现一个简单的spring framework
  • 银河麒麟服务器、centos7服务器一键卸载mysql脚本
  • 【随笔】- 程序员的40岁后健身计划
  • 后端项目开发:集成Druid数据源
  • 深度学习11:Transformer
  • 免费开源跨平台视频下载器 支持数百站点视频和音频下载-ytDownloader
  • R包开发1:RStudio 与 GitHub建立连接
  • 红蓝攻防:浅谈削弱WindowsDefender的各种方式
  • 什么是响应式设计(Responsive Design)?如何实现一个响应式网页?
  • QT之应用程序执行脚本
  • 学习文档链接
  • 【Java 高阶】一文精通 Spring MVC - 转换器(五)
  • 【HSPCIE仿真】输入网表文件(1)基本内容和基本规则
  • IBM Db2 笔记
  • 【Cortex-M3权威指南】学习笔记2 - 指令集
  • Java——一个Java实体类,表示一个试题的模型
  • PHP8函数的引用和取消-PHP8知识详解