快速排序的思想是"分而治之",你可以把它想象成打完一边的怪,打另一边的怪。

核心思路就是1.找到"一个人的身高",比他高的站后面,比他矮的站前面。

2.在矮的那堆人中再找出一个人的身高,比他高的站后面,矮的站前面,以此类推。

3.高个子那边也是如此。

接下来看保姆代码:

public class Parti {public void quick(int[] arr, int first, int end) {int x = first;//first和end都是数组下标,end不要弄成数组长度哟int y = end;int k = arr[first];//这就是那个"一个人的身高",相当于参照物.while (x < y) {while (x < y && arr[y] >= k) {//有人问,上面判断x<y了,为啥这里还要判断,因为y--啊....y--;//不满足arr[y]>=k就退出,意思就是y递减,直到找到第一个比K小的数退出.}if (x < y) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;x++;//其实这个x++,不要也可以,但为了体恤虚拟机,让他少走几步路吧.}while (x < y && arr[x] <= k) {x++;}if (x < y) {int temp = arr[x];arr[x] = arr[y];arr[y] = temp;y--;}}System.out.println("k="+k+" "+"x="+x+" "+"y="+y);//这个你可以用来看"一个人的身高",和x,y大小,可以判断接下来是运行哪步.if (x > first) {//这2个递归调用,就是在高个子和矮个子中再排序.quick(arr, first, x - 1);}if (y < end) {quick(arr, x + 1, end);}}public static void main(String[] args) {Parti p = new Parti();int[] list = { 50, 20, 10, 88, 70, 57, 9, 58 };p.quick(list, 0, 7);for (int i : list) {System.out.print(i + " ");}}
}

到这里了,你要是还看不懂!没关系,还有图。

我们看看上面代码的运行结果

接着看第一次排序的过程图

第二次,第三次,第N次。。。我不想弄了,晕了~~~~~~~~

超小白教程之快速排序相关推荐

  1. geoserver 发布 矢量切片(pbf)并用openlayers 6.14 /leaflet 1.8 加载展示 (二)(小白必备:超详细教程)

    上一篇讲了 如何利用geoserver 发布矢量切片,接下来我们说 如何去展示,既然做我们就作全面吧,谁让我们gis 就是这么苦逼呢,哈哈. 环境: geoserver 2.21 vue 2.0 op ...

  2. geoserver 发布 矢量切片(pbf)并用openlayers 6.14 /leaflet 1.8 加载展示 (三)(小白必备:超详细教程)

    前两篇分别讲了 如何利用geoserver 发布矢量切片和openlayers 加载.接下来我们说 如何用leaflet 展示,既然做我们就作全面吧,谁让我们gis 就是这么苦逼呢,哈哈. 环境: g ...

  3. geoserver 发布 矢量切片(pbf)并用openlayers 6.14 /leaflet 1.8 加载展示 (一)(小白必备:超详细教程)

    环境: geoserver 2.21 vue 2.0 openlayers 6.14 leaflet 1.8 第二篇地址:openlayers 加载矢量切片 geoserver 发布 矢量切片(pbf ...

  4. Centos7 搭建Nginx图片服务超详细新手小白教程

    简介:以上文章讲述的是[Centos7超详细的安装与部署应用MySQL,Redis]接下来我总结一下[Centos7 搭建Nginx图片服务超详细教程].觉得我还可以的可以加群一起督促学习探讨技术.Q ...

  5. 计算机网络教程网线制作,图吧小白教程 篇二十六:手把手教你自制网线(夹网线水晶头)...

    图吧小白教程 篇二十六:手把手教你自制网线(夹网线水晶头) 2019-11-19 23:07:38 31点赞 309收藏 27评论 创作立场声明:咕咕咕 教程最后还是出了,不过咱现在用啥还是直接网购号 ...

  6. HbuilderX微信小程序uniapp分包小白教程趟坑【伸手党福利】【干货】

    本教程为小白教程,主管操作,具体原理讲解欢迎评论区补充. 微信小程序分包原因: 1.多人开发 2.引入了大型js 3.单项目多模块需要分包 官方资料: https://developers.weixi ...

  7. 小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集

    小白教程:Ubuntu下使用Darknet/YOLOV3训练自己的数据集 YOLOV3官网教程:https://pjreddie.com/darknet/yolo/ 使用预训练模型进行检测 git c ...

  8. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  9. 安装64位Oracle 10g超详细教程

    安装64位Oracle 10g超详细教程 1. 安装准备阶段 1.1 安装Oracle环境 经过上一篇博文的过程,已经完成了对Linux系统的安装,本例使用X-Manager来实现与Linux系统的连 ...

  10. mysql超详细教程_MySQL8.0.23安装超详细教程

    前言 最近在做一个人脸识别的项目,需要用数据库保存学生信息与前段交互. MySQL的优点 1.mysql性能卓越,服务稳定,很少出现异常宕机. 2.mysql开放源代码且无版权制约,自主性及使用成本低 ...

最新文章

  1. 关于MAC升级后,vim更新插件报错
  2. matlab-xlsread无法打开文件找不到文件
  3. UIView的生命周期
  4. RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
  5. 学生成绩查询java版_学生成绩查询系统,基于ssm的JAVA系统
  6. CSDN在2017年度的若干“升级”
  7. curl 安装_实用干货——如何使用curl命令下载文件
  8. VTD信号灯TrafficLight数据解析提取
  9. 如何位图转换矢量图或者数字油画底稿
  10. 已解决IndentationError: unindent does not match any outer indentation level
  11. 详解百度大脑EdgeBoard出色的视频处理技术
  12. iOS SafeArea安全区域
  13. npm ERR! could not determine executable to run
  14. 315线上知识竞赛答题活动方案及模板分享
  15. Java到底能干什么?
  16. c语言处理rna序列,RNAseq 完整操作流程以及后续例子操作
  17. python实现水仙花数判断
  18. 库卡工业机器人负载曲线图_KUKA/库卡机械臂 KR500 R2830工业机器人负载500KG
  19. Ettercap 进行arp嗅探密码
  20. FastAdmin点击输入框, 弹出选择页面, 并把所选的值返回给父窗口

热门文章

  1. 单片机入门数字电路之边沿触发器
  2. 计算机软件专业搞腾讯地图,腾讯地图电脑版
  3. ASCII码中10和13的含义
  4. 2022茶艺师(中级)考试题及模拟考试
  5. SPSS——方差分析
  6. Shell 脚本:DDNS for aliyun
  7. 汇编语言第一课作业1.1
  8. iphone计算机同样答案,学会这4招,iPhone搭配Windows电脑一样好用
  9. Python数据分析(二) —— 进阶绘制双折线图
  10. iOS状态栏文字设置成白色