推广 热搜: page  音视频  使用  个数  搜索引擎  选择  企业  父亲  百度  可以 

【数据结构】快速排序递归实现 _三种方法详解+优化

   日期:2025-01-02     作者:caijiyuan    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/18800.html
核心提示:常见的排序算法有以上八种,所以预估会分成几期来讲,感兴趣的朋友们不妨点个收藏专栏。 ღ( ´・ᴗ・&

常见的排序算法有以上八种,所以预估会分成几期来讲,感兴趣的朋友们不妨点个收藏专栏。 ღ( ´・ᴗ` )比心

OJ链接


快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为

任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

将区间按照基准值划分为左右两半部分的常见方式: Hoare法、挖坑法、前后指针法

快排又可以通过递归和非递归的方式进行实现。

  1. 当选择左边的值做key时,右边先走。
  2. 当选择右边的值做key时,左边先走。

本文默认排升序,如图,选择左边值是key。右边先走,找比key小的值停下来,然后左边再走,找到比key大的停下来。交换左右两边的值,知道左右两者相遇。相遇点的值和key值交换。

 
 

Hoare版本变形。

1、同样的,选择左边的值做key,右边先走
2、选择右边的值做key,左边先走。

右边找小,把比key小的值放进坑里,右边形成新的坑;左边找大扔到坑里,左边形成新的坑。

 
 
 

key选择不同,prev和cur的位置也不同。

当左边的值做key时,cur找比key小的值,找到比key小的值就停下来++prev,交换prev和cur的值。

 
 

对于理想的快排,每次基准值如下

时间复杂度是 O(N*logN)

但是当数组是有序时

快排退化成冒泡排序。

解决方法
1、随机取key值
2、三数取中。

但是三数取中 遇到数组元素相同的情况又会失效。

三数取中

 
 

快速排序的递归实现类似二叉树的前序遍历过程。

先使用Hoare、挖坑法或者前后指针法进行单趟排序,再通过递归分别处理左区间和右区间。

本文地址:http://ww.kub2b.com/news/18800.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号