博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用排序算法:快速排序
阅读量:7101 次
发布时间:2019-06-28

本文共 1323 字,大约阅读时间需要 4 分钟。

算法思路

快速排序差不多是面试中问的最多的一种排序算法了,快排是比较容易理解的,核心思路就是,选取一个数作为基准,将原来的列表分为两个部分,一部分全部小于这个基准数,另外一部分全部大于这个基准数,然后呢再按照这个方法对划分出来的两部分继续做同样的操作,直到无法划分的时候排序也就完成了。

以数组[3,2,1,5,4,6]为例,其排序过程如下图所示。

关于时间复杂度问题, 平均复杂度n log(n) 最坏情况 n^2,以长度为16的list为例:

代码实现

方法一:

按照上述的思路可分为两个部分来写代码,一部分是使用递归,一部分是调整位置。

def partition(nums, left, right):    temp = nums[left]    while left < right:        while left < right and nums[right] >= temp:   # 从右往左搜索比基准值小            right -= 1   # 没有则往右走一位        nums[left] = nums[right]  # 找到了比基准值小的则调整顺序        while left < right and nums[left] <= temp:  # 从左往右找比基准大的数            left += 1        nums[right] = nums[left]    nums[left] = temp   # 交换完成之后归位    return left  # 返回基准值的位置def quick_sort(nums, left, right):    if left < right:        mid = partition(nums, left, right)        quick_sort(nums, left, mid - 1)   # 比基准值小的一部分再次进行快排        quick_sort(nums, mid + 1, right)  # 比基准值大的一部分

方法二:

上面这种呢是在原有的list进行变换,如果不考虑原有变换还有一种更直观的方法来实现,使用列表生成式来实现,只不过在数据量很大的时候会占用更多的空间。不考虑交换操作,直接简单粗暴的把list分割成两部分。

def quick_sort(nums):    if len(nums) <= 1:        return nums    pivot = nums[len(nums)//2]    left = [x for x in nums if x < pivot]    middle = [x for x in nums if x == pivot]    right = [x for x in nums if x > pivot]    return quick_sort(left) + middle + quick_sort(right)

 

转载于:https://www.cnblogs.com/FanMLei/p/10500998.html

你可能感兴趣的文章
Cocos Creater 监听程序到后台和重新到前台
查看>>
Windows 10 应用创建模糊背景窗口的三种方法
查看>>
Python类与标准库
查看>>
vue inheritAttrs、$attrs和$listeners使用
查看>>
诗歌的分类
查看>>
nexus maven私服搭建
查看>>
系统空间占用排查 tomcat超大日志catalina.out 删除 与df 状态更新
查看>>
UML及其StarUML介绍
查看>>
一起谈.NET技术,MonoTouch中的MVC简介
查看>>
将WPF UI单元复制到“.NET研究”剪贴板
查看>>
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
查看>>
iphone开发之轻松搞定原生socket 编程,阻塞与非阻塞,收发自如
查看>>
ColdFusion select option 用法,看看哪种适合你的
查看>>
Amazium - 响应式 CSS 框架 - 开源中国
查看>>
使用Vitamio打造自己的Android万能播放器(5)——在线播放(播放优酷视频)
查看>>
iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容...
查看>>
PHP通过Thrift操作Hbase
查看>>
Sql Server导入Access数据库报不可识别的数据库格式 Microsoft JET Database Engine
查看>>
http://knockoutjs.com/工作杂记
查看>>
Http协议中的Header与Body
查看>>