参考链接: Python中的快速排序Quicksort

最近在公司的工作内容发生变化,短期内工作量变少了,这也让我有时间整理一些日常学习和工作中的收获或思路。所以申请了博客,并打算持续更新。

快速排序采用了分治的思想,基本思想是选取数组中一个数为基准数(一般选择数组中的第一个数),一次排序过程中,将比基准数小的都放在它左侧,比基准数大的放在它的右侧。经过这次排序后得到两个数组和一个基准数,数组1中全部元素小于基准数,数组2中的全部元素大于基准数,然后对数组1,2分别进行同样的排序(递归),最后直到剩下一个数字。

下面给出python代码实现

1 defpartiton(li, low, high):2 key =li[low]3 while low <4 while low high and li>=key:5 high -= 14>

6 if low <7 li>

9 while low < high and li[low] <10 low>

11 if low <12 li>

14 returnlow15

16 defquickSort(li, low, high):17 if low >=high:18 return

19 center =partiton(li, low, high)20 quickSort(li, low, center - 1)21 quickSort(li, center + 1, high)

关于实现:

快速排序的实现有很多种,这里我给出了比较常规并且好理解的一种.低位,高位两个指针从左右两侧相向遍历list。当高位指针发现了小于基准数的元素时,便停止移动,此时开始移动低位指针,当低位指针发现了大于基准数的元素时,便停止移动,两指针交换元素值,如此循环,直至两指针相遇。

关于时间复杂度:

快速排序具体的运行时间和原始列表本身的排序状态有很大关系,理论上快排的时间复杂度是(nlogn),但是如果运气不好糟糕,比如说初始列表是[5,4,3,2,1],那么根据上面的方法实现过程是什么样的呢,实现过程如下:

[5,4,3,2,1] -> [4,3,2,1,5] -> [3,2,1,4,5] -> [2,1,3,4,5] -> [1,2,3,4,5]

这样的排序实现过程很眼熟,跟最简单的冒泡排序的实现过程是完全相同的,所以说快排的最坏情况是冒泡排序,时间复杂度是(n2)

以上的实现较为通用,如果不使用python,而使用c++,java等其它编程语言实现,代码结构不会相差太多。我想到了一种比较贴合python语法特点,并且能较好的展示快排思想的实现方法。不同点是该方法时间在层递归中需要遍历2次列表,即复杂度为(2nlogn)

defqsort(lst):if notlst:return[]return qsort([i for i in lst[1:] if i < lst[0]]) + [lst[0]] + qsort([i for i in lst[1:] if i > lst[0]])12>10>7>

[转载] 数组快速排序python_python实现快速排序相关推荐

  1. python快速排序解析_快速排序python实现总结

    算法 数据结构 快速排序python实现总结 背景:数据结构与算法是IT相关的工程师一直以来的基础考察重点,很多经典书籍都是用c++或者java来实现,出于对python编码效率的喜爱,于是取sear ...

  2. 这是一个php中快速排序字母,php 快速排序

    快速排序是以其中一个数为比较标准,其他比较的数分块处理,应用递归按相同想法处理数据 比如:4 3 6 2 1 7 8 以4为比较对象 排序为 3 2 1 6 7 8 左边为 3 2 1 右边 为 6 ...

  3. 多线程随机数组生成+双线程快速排序(C++实现)(0.2秒排100W个数字)

    简述 用很多个线程进行随机数的生成 用两个线程来进行数组的排序 基于的算法是快速排序算法. 基本可以做到 0.2秒左右的时间排完100W个数字 #include <iostream> us ...

  4. 链表快速排序python_Python一行代码实现快速排序的方法

    今天将单独为大家介绍一下快速排序! 一.算法介绍 排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法.其中" ...

  5. [转载] [硕.Love Python] QuickSort(快速排序)

    参考链接: Python中的Quicksort def partition(a, i, j): k = -1 while True: while k * (a[i] - a[j]) >= 0: ...

  6. java jdk实现快速排序_Java实现快速排序过程分析

    快速排序过程 没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"!光听这个名字是不是就觉得很高端呢. 假设我们现在对"52 39 67 95 70 8 25 5 ...

  7. php快速排序实现代码,快速排序的算法php实现

    function qsort(&$arr) { _quick_sort($arr, 0, count($arr) - 1); } /** * 采用递归算法的快速排序. * * @param a ...

  8. python列表快速排序_python 实现快速排序

    一.快排思想 快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数), 分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数, i- ...

  9. java 快速排序流程图_JAVA快速排序图解

    高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对"6 1 2 7 9 3 4 5 1 ...

最新文章

  1. Table of Contents - Tomcat
  2. 零基础学Python(第二章 中文编码)
  3. Linux网络编程服务器模型选择之并发服务器(下)
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的人力资源管理系统
  5. 关于MFC里面位图相关的操作
  6. 【研报分享】华为鸿蒙深度研究.pdf(附下载链接)
  7. 自然语言21_Wordnet
  8. JavaScript数组实现图片轮播
  9. RocketMQ Topic是如何注册和保存的
  10. Win10系统耳机插入不起作用_依然外放声音---Windows运维工作笔记053
  11. 一学期c语言的学习总结
  12. 2022年茶艺师(中级)考试题库模拟考试平台操作
  13. C#应用案例之打字母游戏
  14. adf机器_STOLL机器——ADF-3 681000 机器赏析
  15. 3D MAX脚本教程1
  16. Android 获取应用列表
  17. vba 将http.responseText返回的 unicode字符转换成中文
  18. python随机生成小写字母表_用小写字母生成大随机字符串的最快方法
  19. ubuntu搜狗输入法
  20. poj 3728 The merchant// lca(倍增实现) + dp || tarjan+并查集路径上dp

热门文章

  1. SSM项目使用junit单元测试时Mybatis通配符加载Mapper不能正常加载
  2. 【NOI2001】【Vijos1531】食物链(并查集拓展域)
  3. java 顺序表的实现_顺序表的简单实现(Java)
  4. jsp servlet mysql 乱码_关于jsp和servlet中的乱码问题
  5. 无法扩展该卷 因为群集的数量将超过文件系统_Ubifs文件系统分析
  6. 第一章节 c#面向对象
  7. mysql6.1 交叉编译_Armbian系统-mysql-connector-c++-1.1.8版本-交叉编译-安装
  8. 需要多少次找出较轻的小球
  9. SourcesTree使用手册2:文件更新
  10. 利用SQL语言实现数据库的静态完整性