快速排序的python实现
- def quick_sort(array, left, right):
- if left < right:
- base_index = division(array, left, right)
- quick_sort(array, left, base_index - 1) # 对小于基准值的再次进行分割
- quick_sort(array, base_index + 1, right) # 对大于基准值的再次进行分割
- def division(array, left, right):
- base_value = array[right]
- i = left
- for j in range(left, right): # 遍历除最后一个元素的其他元素
- if array[j] <= base_value: # 和基准值对比
- array[i], array[j] = array[j], array[i] # 小于基准值,则替换到list前
- i += 1 # 替换过后,往后移一位,准备接受下次替换
- array[i], array[right] = array[right], array[i] # 遍历完成后,将基准值放到所有小于它的值之后
- return i # 返回基准值的index,用于分割列表
- if __name__ == '__main__':
- a = [random.randint(1, 1000) for i in range(50)]
- quick_sort(a, 0, len(a) - 1)
- print a
快速排序的python实现的更多相关文章
- 快速排序(python实现)
算法导论上的快速排序采用分治算法,步骤如下: 1.选取一个数字作为基准,可选取末位数字 2.将数列第一位开始,依次与此数字比较,如果小于此数,将小数交换到左边,最后达到小于基准数的在左边,大于基准数的 ...
- 算法导论 第七章 快速排序(python)
用的最多的排序 平均性能:O(nlogn){随机化nlogn} 原地址排序 稳定性:不稳定 思想:分治 (切分左右) 学习方式:自己在纸上走一遍 def PARTITION(A,p,r): x = ...
- 快速排序方法——python实现
参考博文:http://www.cnblogs.com/jingmoxukong/p/4302891.html 快速排序是一种交换排序. 快速排序由C. A. R. Hoare在1962年提出. 它的 ...
- 排序算法之快速排序的python实现
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序. 快速排序算法的工作原理如下: 1. 从数列中挑出一个元 ...
- 快速排序之python
快速排序( Quick sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行递归排序,以达到整个序列有 ...
- 快速排序算法-python实现
#-*- coding: UTF-8 -*- import numpy as np def Partition(a, i, j): x = a[i] #将数组的第一个元素作为初始基准位置 p = i ...
- 快速排序的Python代码实现
选择一个数,和它后面的数比较,把比它小的放在它的左边,大的在右边(位置可能会因为左边元素的添加而右移) def quick_sort(arr): if arr==[]: return[] else: ...
- 快速排序quick_sort(python的两种实现方式)
排序算法有很多,目前最好的是quick_sort:unstable,spatial complexity is nlogN. 快速排序原理 python实现 严蔚敏的 datastruct书中有伪代码 ...
- 排序算法:快速排序解析及Python实现
关键词:分而治之.递归.计算速度.基准值 1. 什么是分而治之? 1.1 分而治之(divide and conquer)一种递归式方法 1.2 找出基线条件,这种条件必须尽可能简单 1.3 不断将问 ...
随机推荐
- Histograms of Sparse Codes for Object Detection用于目标检测的稀疏码直方图
AbstractObject detection has seen huge progress in recent years, much thanks to the heavily-engineer ...
- Android 拖拽功能的使用实例
图片的拖拉功能是处理图片进一个有用且常用的功能,由于手机屏幕尺寸的限制,往往无法在手机上一次性的显示一张比较大的图片,也就是说,我们在手机上一次性只能看到图片的一部分,此时就可以使用图片的拖动功能来拖 ...
- js中switch语句不执行
参考http://www.jb51.net/article/54393.htm switch语句与if语句的关系最为密切,也是其它编程语言中普遍使用的一种流程控制语句,但switch的匹配是全等模式, ...
- 存在不同浏览器间的JS兼容总结
2016年2月19日个人博客文章--迁移到segmentfault 当我们在编写JS用于处理事件时,由于考虑到不同浏览器间Js代码兼容不同,代码不易记忆,于是做出如下整理.(当然以后还会增加更新的.. ...
- 通过HookNtCreateSection 动态监控驱动sys、动态链接库dll、可执行文件exe加载
[cpp] view plaincopyprint? /* windows2003 x86/x64 window7 x86 windows2008 R2 x64测试通过 */ #include < ...
- 013-Spring Boot web【二】静态资源、Servlet、Filter、listenter
一.静态资源 1.1.webapp默认支持静态资源 在src/main/webapp下建立user.html默认支持访问 1.2.默认内置静态资源目录.可被直接访问 查看包:spring-boot-a ...
- 从 spring-cloud-alibaba-nacos-config 进入 nacos-client
sc 的 bootstrap context 是 main application context 的 parent,需要在 main application context 中使用的 bean 可以 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_5_文件存储的原理和记事本打开文本显示原理
原理 流对象指向这个文件a.txt 往文件中写数据,写的时候比较特殊 97转换成二进制是多少呢? 输入97然后选择二进制.转换后为 1100001 硬盘上实际存的是97的二进制 97查询阿斯克码表就是 ...
- Week 9 - 638.Shopping Offers - Medium
638.Shopping Offers - Medium In LeetCode Store, there are some kinds of items to sell. Each item has ...
- linux下vscode备忘
vscode如何自定义,如何方便地编写c/c++vscode支持vim.sublime快捷键,在设置->keymap可以安装相应插件vscode默认的快捷键支持自定义,打开keyboard sh ...