快速排序算法(快速排序怎么样算一趟)

快速排序算法(快速排序怎么样算一趟)

快速排序详细解说

  1、单趟排序

  1、把第一个元素命名为关键key,让begin指针指向首元素,end指针指向尾元素

  2、end从左向右找小(小于key的元素),begin从右向左找大(大于key的元素)

  3、交换end和begin指向的元素

  4、end继续找小,begin继续找大,再交换。

  5、直到end等于begin,就让key与begin指向的元素交换。

  2、过程演示

  在这里插入图片描述

  不难发现,经过一趟排序后,key左边都是比它小的元素,key右边都是比它大的元素。所以key就排到了自己该有的位置

  即单趟排就能排好一个元素(排好的元素就不用动了)。

  若我们在key左边的数组再次用单趟排(选一个新key),在key右边的数组用单趟排,则就又能排好一个元素。

  当我们不断递归下去,直到key左边和右边的数组元素只有一个时,此时key左边和右边都有序,整个数组就有序了。

  在这里插入图片描述

  3、具体代码

  1、基本思路

  1、把第一个元素挖走放到key,第一个位置成坑

  2、end(最后一个元素的指针)找小,找到后把元素扔到坑里,end处形成新的坑

  3、begin(第一个元素的指针)找大,找到后把元素扔到坑里,begin处形成新的坑

  4、不断地找小找大,当end等于begin时(此处为坑),把key值放到坑

  5、递归左边,递归右边

  2、具体代码

  1、基本思路

  1、定义一个前指针指向第一个元素,定义一个后指针指向前指针的后一个位置。

  2、cur找小,遇到比keyi小的值就停下,并且prev指针++,交换两个指针的值

  3、cur走到底后,把prev位置的值与keyi位置交换

  4、递归左边,递归右边

  2、具体代码

  1、基本思想

  1、让要排序的元素都入栈

  2、让所以元素出栈,对出栈元素进行一趟排序(排好一个元素key)。

  3、若key右边还有两个以上元素,让key右边元素都入栈;若key左边还有两个以上元素,再让左边元素都入栈

  4、让左边元素都出栈,进行一趟排序;让右边元素都出栈,进行一趟排序

  5、不断循环,直到key左边和右边都只有一个元素,都不需要入栈;即栈为空,就退出循环

  2、具体代码

  T=单趟所用时间*排序趟数

  1、单趟排序所用时间(以左右指针法为列)

  当左右指针相遇时,排序停止,所以用时N

  2、排序趟数

  第一趟排好一个元素

  递归左边,右边;选出两个key

  第二趟排好两个元素(一共排好了3个元素,把数组分成了四段)

  选出四个key

  第三趟排好四个元素

  。。。。。

  所以排序趟数为logN

  快排时间复杂度为N*logN

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/23627.html

(0)
上一篇 2023-10-22 16:30
下一篇 2023-10-22

相关推荐

  • 我以为我对Mysql索引很了解,直到我遇到了阿里的面试官

    我以为我对Mysql索引很了解,直到我遇到了阿里的面试官相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。 因为索引是MySQL中比较重点的知识,相信很多人都有一定的了解,尤其是在面试中出现的频率特别高。楼主自认为自己对MySQL的索引相关知识有很多了解,而且因为最近在找工作面试,所以…

    2023-04-02
    150
  • 温温的go编程学习笔记(1)

    温温的go编程学习笔记(1)“github.com/gogf/gf/v2/os/genv”用法总结:一般不用 new 来新建变量,凡遇到 chan、map 和 slice

    2022-12-14
    147
  • 再有人问你分布式事务,把这篇扔给他

    再有人问你分布式事务,把这篇扔给他不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付。又或者在网上购物明明已经扣款,但是却告诉我没有发生交易。这一系列情况都是因为没有事务导致的。这说明了事务在生活中的一些重要性。有了事务,你去小卖铺买东西,那就是一…

    2023-04-03
    155
  • 面试官:MySQL事务是怎么实现的「终于解决」

    面试官:MySQL事务是怎么实现的「终于解决」前言用过MySQL的同学都知道,它的InnoDB存储引擎,是通过事务来保证数据的一致性的。数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。特性说到事务…

    2023-04-02
    135
  • vue3+ts开发贪吃蛇

    vue3+ts开发贪吃蛇vue3+ts实现的简易版贪吃蛇,vue3+ts实现的简易版贪吃蛇,vue3+ts实现的简易版贪吃蛇,

    2023-11-14
    137
  • async-validator 源码学习笔记(二):目录结构

    async-validator 源码学习笔记(二):目录结构上一篇文章《async-validator 源码学习(一):文档翻译》已经将 async-validator 校验库的文档翻译为中文,看着文档可

    2022-12-14
    161
  • 女神之路游戏正版_游戏女神之路兑换码

    女神之路游戏正版_游戏女神之路兑换码代码笔记 为一系列的文章,从python ,django 完整项目所用到的环境和工具讲起,随时供自己备查,进阶全栈工程师的狂暴之路。

    2022-12-14
    155
  • 前端实现贪吃蛇小游戏(jquery)

    前端实现贪吃蛇小游戏(jquery)贪吃蛇,基于`Jquery`实现 下图是效果截图以及附上源码,(可以自行复制体验,无额外插件) ![image.png](https://p3-ju

    2023-11-14
    134