本文主要介绍用python实现基本的快速排序算法,体会一下python的快排代码可以写得多么简洁。

1. 三言两语概括算法核心思想

先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来的数组划分成两部分:小于基准数的左子数组和大于等于基准数的右子数组。然后对这两个子数组再递归重复上述过程,直到两个子数组的所有数都分别有序。最后返回“左子数组” + “基准数” + “右子数组”,即是最终排序好的数组。

2. Talk is cheap, show the code

# 实现快排
def quicksort(nums):
if len(nums) <= 1:
return nums # 左子数组
less = []
# 右子数组
greater = []
# 基准数
base = nums.pop() # 对原数组进行划分
for x in nums:
if x < base:
less.append(x)
else:
greater.append(x) # 递归调用
return quicksort(less) + [base] + quicksort(greater) def main():
nums = [6,1,2,7,9,3,4,5,10,8]
print quicksort(nums) main()

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

随机推荐

  1. python 开发技巧(4)-- 用PyCharm实用技巧(我自己常用的)

    pycharm快捷键 1.快速导入类 Ctrl + Alt + Space 2.追踪类和方法的定义 Ctrl + b 3.复制当前行 Ctrl + d 4.移动当前行 Ctrl + Shift + ( ...

  2. mysql 数据库复制表 create table city1 like city;

    -- 只复制表结构 create table city1 like city; INSERT INTO test2 SELECT * FROM test; -- 上面的表必须存在 -- 复制整张表的数 ...

  3. Spring MVC的@ResponseBody回来JSON串

    1 406错误 <mvc:annotation-driven />不用动,请求的时候URL的文件扩展名应为json @ResponseBody会根据扩展名,或者Header,或者Param ...

  4. 使用 JDB 调试器

    您可以使用调试 applet 或应用程序的 jdb 命令来调试 Servlet. 为了调试一个 Servlet,我们可以调试 sun.servlet.http.HttpServer,然后把它看成是 H ...

  5. Eclipse 浏览(Navigate)菜单

    浏览 Eclipse 工作空间 浏览(Navigate)菜单提供了多个菜单可以让你快速定位到指定资源. 上图中 Open Type, Open Type in Hierarchy 和 Open Res ...

  6. python网络数据采集的代码

    python网络数据采集的代码 https://github.com/REMitchell/python-scraping

  7. Allegro转换PADS终极篇.....

    allegro转pads终极篇                                                                                      ...

  8. iOS 实现从后台切换到前台-复制分享宝贝内容,打开淘宝APP,自动弹出宝贝提示信息

    - (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"\n ===> 程序重新激活 !&q ...

  9. 1119 机器人走方格 V2(组合)

    1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于 ...

  10. js获取滚动条的位置

    页面具有 DTD,或者说指定了 DOCTYPE 时,使用 document.documentElement. 页面不具有 DTD,或者说没有指定了 DOCTYPE,时,使用 document.body ...