快速排序–单边循环法

递归的精髓在于放弃!放弃你对于理解和跟踪递归全程的企图,只理解递归两层之间的交接,以及递归终结的条件。

快速排序和冒泡排序一样,也属于交换排序.和冒泡排序不同的是,快速排序在每一轮选中1个基准元素,并让其它比它大的元素移动到一边,比它小的移动到另一边,从而把数列拆解成两个部分.这种思路叫作 分治法.

通过以上描述,快速排序实现分成2步:

  1. 获取基准元素

  2. 元素的交换

基准元素的选择

毫无疑问,最简单的方式就是选择数列的第1个元素作为基准元素.

元素的交换

元素的交换实现有两种方式: 单边循环法双边循环法.先记录单边循环法的思路.

举个例子,将一下数组,从小到大进行升序排序:

一. 首先获取基准元素standardValue,同时设置一个mark指针指向数列起始位置,mark指针表示 小于基准元素的区域边界.用以上数组来说:

二. 然后,从基准元素的下一位(即7)开始遍历数组:

如果遍历到的元素大于基准元素,继续遍历;

如果遍历到的元素小于基准元素,需要完成:

  1. 将mark指针右移1位,因为小于基准元素的区域边界增大了1;

  2. 将最新遍历到的元素和mark指针指向的元素进行交换,因为最新遍历的元素属于小于基准元素standardValue的区域.

三. 最后,将基准元素和指针指向的元素交换,这一轮宣告结束,将看到的数组是这样:

实现了将数组中比基准元素4小的元素移动到了左边, 比基准元素4大的元素移动到了右边, 分成左右两个部分, 然后对左右两个部分继续一 二 三的步骤,也就是递归.

单边循环法的实现

下集预告

下篇记录一下快速排序的双边循环法.

作者:习惯沉淀,一直在路上的北漂码畜

Original: https://www.cnblogs.com/yadongliang/p/14953956.html
Author: 习惯沉淀
Title: 快速排序–单边循环法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/554186/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 阿里云有奖体验:如何通过ECS挂载NAS文件系统

    实验简介 本实验提供CentOS系统ECS一台和NAS文件服务。 NAS基于POSIX文件接口,天然适配原生操作系统,提供共享访问,同时保证数据一致性和锁互斥。它提供了简单的可扩展…

    技术杂谈 2023年7月11日
    090
  • java 8 新特性

    java8 是一个有里程碑的一个版本,提供了很多的新特性,但这些新特性是实打实有用的,而不是一些鸡肋 接口新特性 java8 之前,往接口里新加一个方法,那么所有的实现类都需要变动…

    技术杂谈 2023年7月24日
    060
  • Do the JSON keys have to be surrounded by quotes?(转载)

    Or should I always use the following syntax? (And if so, why?) I haven’t really foun…

    技术杂谈 2023年5月31日
    099
  • 猜数字小游戏

    python猜数字游戏 要求: 输入指定范围,在该范围内进行猜数,可多次猜数,直到猜中 如果猜错,给出下次猜数的范围继续猜 思路: 导入random包,生成随机数 利用while循…

    技术杂谈 2023年7月23日
    089
  • GPS NEMA 0183协议

    注:发送次序$GPZDA、$GPGGA、$GPGLL、$GPVTG、$GPGSA、$GPGSV*3、$GPRMC 如:$aaccc,ddd,ddd,…,ddd*hh 1…

    技术杂谈 2023年5月31日
    094
  • ML/NLP中的一些术语/公式备忘录

    CCGcombinatory categorial grammar组合范畴语法 在数学中,误差函数(也称之为高斯误差函数,error function or Gauss error…

    技术杂谈 2023年6月21日
    091
  • Python 字典相关知识

    按照键名查询:如果没有查询的键名,程序将会 报错。 dict1 = {‘one’: 1, ‘two’: 2, ‘three’: 3, ‘name’: ‘吕小树’, ‘sex’: ‘…

    技术杂谈 2023年6月21日
    098
  • 线索二叉树相关问题

    线索二叉树相关问题 1.在先序线索二叉树中求解指针P的后继结点 binode presuc(Binode *p){ if(p->rtag==1) return p->r…

    技术杂谈 2023年7月23日
    062
  • Eclipse——安装Lua Eclipse插件

    首先单击Eclipse->Help->Install New Software 在出现的Install窗口中,点击右侧的Add 然后出现下图 在type filter …

    技术杂谈 2023年5月30日
    087
  • SpringBoot自定义Banner信息

    SpringBoot自定义Banner信息 一、介绍 本文主要介绍使用springboot框架时,我们可以自定义我们项目的相关信息,例如启动图、启动时的版本号等。 二、自定义ban…

    技术杂谈 2023年6月21日
    0108
  • Deepin 15.4 更改为 阿里云源

    自带的 软件包源 不好用,卡顿严重,准备替换它: 方式三:替换为 “中国科学技术大学”源 cnblogs_Highlighterbash; sudo vim…

    技术杂谈 2023年5月30日
    072
  • 王阳明心学语录

    1 处朋友,务相下则得益,相上则损 译文:同朋友相处,一定要相互谦让,就会获得好处,而相互攀比互争高低,则只会受损。 2 曾国藩 :败人两物,非傲即惰 3 曾子曰:”吾…

    技术杂谈 2023年5月31日
    083
  • 如何保证消息的可靠性的投递

    如何保证消息的可靠性的投递 在本项目中,添加员工会发送入职邮件,利用RabbitMQ的队列发送入职邮件。这部分只是实现发送邮件的功能,RabbitMQ它有它的优点就是异步、解耦、流…

    技术杂谈 2023年7月11日
    0119
  • SpringBoot-shiro

    SpringBoot-shiro 12.1 快速入门 1、导入依赖 org.apache.shiro shiro-core 1.8.0 org.slf4j jcl-over-slf…

    技术杂谈 2023年6月21日
    096
  • 用ColorMatrix將Bitmap轉成灰度图

    在Android中,若想將整張圖片轉成灰階效果其實有更簡便的方式,只要透過ColorMatrix類別的setSaturation函式將飽和度設為0即可。(您也可以試試從0~1之間的…

    技术杂谈 2023年5月31日
    091
  • Hadoop集群模式安装笔记

    前言 Hadoop集群= HDFS集群+ YARN集群特点:两个集群逻辑上分离,通常物理上在一起;并且都是标准的主从架构集群 Hadoop安装 方&#…

    技术杂谈 2023年6月21日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球