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

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

快速排序详细解说

  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

相关推荐