算法描述:

执行过程中,i 之前(含)的元素都比 A[r] 小,之后的比 A[r] 大。即 p ~ i 的元素比 A[r] 小,其后A[i+1] ~ A[j-1] 的元素比A[r]大。最后,交换A[i+1]与A[r]。

算法实现:

def QuickSort(a, p, r):if p < r:q = Partition(a, p, r)QuickSort(a, p, q-1)QuickSort(a, q+1, r)def Partition(a, p, r):x = a[r]i = p-1for j in range(p, r):if a[j] <= x:i += 1a[i], a[j] = a[j], a[i]a[i+1], a[r] = a[r], a[i+1]return i+1def main():a = [2, 8, 7, 1, 3, 5, 6, 4]QuickSort(a, 0, len(a)-1)print(a)if __name__=='__main__':main()

随机化版本:

import numpy as np
import timedef RandomizedQuickSort(a, p, r):if p < r:q = RandomizedPartition(a, p, r)RandomizedQuickSort(a, p, q-1)RandomizedQuickSort(a, q+1, r)def Partition(a, p, r):x = a[r]i = p-1for j in range(p, r):if a[j] <= x:i += 1a[i], a[j] = a[j], a[i]a[i+1], a[r] = a[r], a[i+1]return i+1def RandomizedPartition(a, p, r):import randomi = random.randint(p, r)  # 随机选取一个元素作为主元a[i], a[r] = a[r], a[i]return Partition(a, p, r)def main():a = np.random.randint(low=0, high=1000, size=1000)  # 随机生成1000个0到1000之间的整数并存到列表中a = list(a)before = time.time()RandomizedQuickSort(a, 0, len(a)-1)after = time.time()operation_time = after - before  # 计算运行时间print("快速排序运算时间:", operation_time, "s")# 快速排序时间复杂度为O(n*logn)if __name__=='__main__':main()

结果如下:

快速排序运算时间: 0.005533695220947266 s

期望为线性时间的选择算法:

from randomized_quicksort import RandomizedPartitiondef RandomizedSelect(a, p, r, i):if p == r:return a[p]q = RandomizedPartition(a, p, r)  # 将数组划分为两个子数组A[p..q-1]和A[q+1..r]k = q-p+1  # 计算子数组A[p..q]内的元素个数kif i == k:return a[q]elif i < k:return RandomizedSelect(a, p, q-1, i)else:return RandomizedSelect(a, q+1, r, i-k)def main():a = [2, 8, 7, 1, 3, 5, 6, 4]print(RandomizedSelect(a, 0, len(a)-1, 4))if __name__=='__main__':main()

输出为第4小的数:4

快速排序的python实现相关推荐

  1. 快速排序(Python实现)

    一.快速排序思想 如果要排序数组中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点).我们遍历 p 到 r 之间的数据,将小于 pivot 的放到左 ...

  2. python排序链表快速排序算法_八大排序之快速排序算法-python实现

    快排就是折中时间和空间的一个算法,可以说是较为高效的算法,平时用用他没啥大问题. 自己也看到个比较形象生动的例子,为了让大家能够看的比较清楚,我就直接转过来给大家看了哈!但是我使用python实现的: ...

  3. python实现快速排序算法_基础算法:快速排序(python实现)

    算法原理 快速排序是一个具有较高性能的排序算法,其主要思想如下: 对数组中的某个元素,确定其在数组中的排序位置,即在其之前的所有元素均小于该元素,在其之后的均大于该元素.对小元素组和大元素组同样执行该 ...

  4. python快速排序算法循环_算法:快速排序的Python实现

    一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left( ...

  5. 快速排序方法——python实现

    参考博文:http://www.cnblogs.com/jingmoxukong/p/4302891.html 快速排序是一种交换排序. 快速排序由C. A. R. Hoare在1962年提出. 它的 ...

  6. 快速排序的Python代码

    快速排序的基本思想是通过不断地交换来将序列中的元素按照一定顺序排列.在 Python 中,可以使用内置的 sorted() 函数来对序列进行排序,也可以使用自定义的快速排序函数. 下面是一个简单的快速 ...

  7. 排序算法-04快速排序(Python实现)

    快速排序 性质 一种基本的交换排序算法,比较常用的排序算法,简称快排. 基本的排序思路如下.基本思想为:通过一趟排序将要排序的数据分割成独立的两部分,分割点左边的数都比它小,分割点右边的数都比它大,然 ...

  8. 随机生成从大到小排序python_随机快速排序(使用Python描述)

    title 代码复制自随机快速排序的实现-夜雨最萌.和快速排序一样呀

  9. python算法与数据结构-快速排序算法(36)

    阅读目录 一.快速排序的介绍 二.快速排序的原理 三.快速排序的步骤 四.快速排序的图解 五.快速排序的python代码实现 六.快速排序的C言语代码实现 七.快速排序的时间复杂度 八.快速排序的稳定 ...

  10. python快速排序代码_Python实现快速排序算法

    原标题:Python实现快速排序算法 Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通 ...

最新文章

  1. linux常用运维工具uptime、iostat、vmstat、sar
  2. java匿名类的用法
  3. Java引入依赖aar,如何将JAR依赖项包含到AAR库中
  4. python经典书籍推荐:python编码规范
  5. inline-block,一个奇怪的问题:中间div掉下来
  6. NO.5 Android Opencv 相机人脸识别
  7. ubuntu查看opencv的版本
  8. Mac电脑音质提示音效调节软件:Boom 3D
  9. DISCUZ!X1模板home空间模板修改说明home.php
  10. 正则匹配中英文全部特殊符号
  11. windows10 应用程序启动快捷键设置与取消
  12. 橘子学ES11之URI搜索方式
  13. 一元享移动怎么样_移动终于良心了?月费6元享46G流量,网友:后悔携号转网了!...
  14. 圆拟合Taubin fit 方法
  15. c语言动态分配内存keil,keil5中结构体分配内存问题
  16. Asp.Net MVC中身份认证和授权
  17. layui 动态绑定下拉框
  18. c语言写plc程序正反转,西门子PLC控制电机正反转编程实例!
  19. 自动化立体仓库可以为企业带来什么效益?
  20. 华硕X44H本本维护纪实

热门文章

  1. 第五章 搭建开发板的测试环境
  2. David Cutler,VMS和Windows NT的首席设计师 (zz.is2120)
  3. 集中刷新父窗口,关闭子窗口的JS(后台)
  4. 需求不容易确定的项目不要接
  5. APS傻瓜教材读后感之为什么需要人机交互调度
  6. 迷宫问题的通用解法C语言数据结构实现
  7. matlab学习笔记1
  8. ICESat 数据介绍
  9. 【ArcGIS|空间分析】查找成本最低路径
  10. 【GIS|原理】地统计分析