【Python实现快排】 𱛡
时间:2019-08-18
本文章向大家介绍【Python实现快排】 𱛡,主要包括【Python实现快排】 𱛡使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文: http://blog.gqylpy.com/gqy/342
"
挖坑法思路:
- 取一个元素p(第一个元素),使元素p归位;
- 列表被p分成两部分,左边的数一定不大于p,右边的数一定不小于p;
- 递归完成排序。
Python代码示例:
lst = [5, 7, 4, 3, 1, 2, 9, 8]
def quick_sort(d, l, r):
if l < r:
m = partition(d, l, r)
quick_sort(d, l, m - 1)
quick_sort(d, m + 1, r)
def partition(d, l, r):
# 挖坑法,函数执行结束后,左边的数一定不大于p,右边的数一定不小于p
p = d[l]
while l < r:
while l < r and d[r] >= p:
r -= 1
d[l] = d[r]
while l < r and d[l] <= p:
l += 1
d[r] = d[l]
d[l] = p
return l
quick_sort(lst, 0, len(lst) - 1)
《算法导论》中的快速排序:
class QuickSort(object):
__INSTANCE = None
def __new__(cls, *args, **kwargs):
"""单例模式"""
if not cls.__INSTANCE:
cls.__INSTANCE = object.__new__(cls)
return cls.__INSTANCE
def __init__(self, data):
self.__quick_sort(data, 0, len(data) - 1)
def __quick_sort(self, d, l, r):
if l < r:
q = self.__partition(d, l, r)
self.__quick_sort(d, l, q - 1)
self.__quick_sort(d, q + 1, r)
def __partition(self, d, l, r):
x = d[r] # last value
i = l - 1 # last index
for j in range(l, r):
if d[j] <= x:
i += 1
d[i], d[j] = d[j], d[i]
d[i + 1], d[r] = d[r], d[i + 1]
return i + 1
QuickSort(lst)
"
原文: http://blog.gqylpy.com/gqy/342
原文地址:https://www.cnblogs.com/gqy02/p/11373756.html
- Visual Studio对程序集签名时一个很不好用的地方
- 一个关于解决序列化问题的编程技巧
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[上篇]
- 从数据到代码——通过代码生成机制实现强类型编程[下篇]
- 谈谈你最熟悉的System.DateTime[下篇]
- 如何解决EnterLib异常处理框架最大的局限——基于异常"类型"的异常处理策略
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[下篇]
- 收藏!6道常见hadoop面试题及答案解析
- 这是EnterLib PIAB的BUG吗?
- [WCF权限控制]基于Windows用户组的授权方式[上篇]
- EnterLib PIAB又一个BUG?
- 关于WCF的一个非常“无语”的BUG!
- 谈谈分布式事务之一:SOA需要怎样的事务控制方式
- [WCF权限控制]WCF的三种授权模式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php微信公众号开发之图片回复
- php微信公众号开发之答题连闯三关
- swoole_process实现进程池的方法示例
- golang实现php里的serialize()和unserialize()序列和反序列方法详解
- keras 实现轻量级网络ShuffleNet教程
- Python应用实现处理excel数据过程解析
- Python实现爬取并分析电商评论
- python中怎么表示空值
- Keras自动下载的数据集/模型存放位置介绍
- Keras 切换后端方式(Theano和TensorFlow)
- python 字符串的驻留机制及优缺点
- php微信公众号开发之翻页查询
- php 中phar包的使用教程详解
- php微信公众号开发之快递查询
- Scrapy框架介绍之Puppeteer渲染的使用