python 实现快速排序
快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数),
分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数,
i----->middle<-----j 每一次排序循环条件为 i != j 左端 i 不等于右端 j,
每次排序,右端j先排,从右往左找,直到找到第一个比标杆(参照数)小的数就停下来。
而 i 从左往右,除了找到比自己大的数停下来之外,还要满足i<j的条件。
当i和j都停下来时,我们就交换索引i处的值和索引j处的值,如果 i != j 就继续从当前j往左边排序找到比标杆(参照值)小的数,
i继续从当前位置向右找比自己大的数,这样循环直到 i == j 意味着,当前i、j索引的值,除了参照值左边都比标杆(参照数)小,
右边都比参照数大,然后第一次排序把标杆和i处的值交换,就算完成了,
然后把该数组分成了两段,分别再递归调用自身继续排序,直到每轮剩下两个数或者 j 先找,走到了 i 的位置,所以递归调用停止的条件就应该是 i>j-1。
def quickSort(list, start, end):
if start>end:
return
i, j = start, end
flag = list[start]
while True:
#先从右往左找
while j>i and list[j] >= flag:
j = j - 1
#再从左往右找
while i< j and list[i] <= flag:
i += 1
if i < j:
list[i], list[j] = list[j], list[i]
elif i == j:
#当左右相等时第一次递归结束
list[start], list[i] = list[i], list[start]
break
quickSort(list,start, i-1)
quickSort(list, i+1, end)
list_test = [7, 4, 7, 2, 4,19, 10, 4, 9, 5, 8, 10]
print(list_test)
quickSort(list_test, 0, (len(list_test)-1))
print(list_test)
#结果为:
[7, 4, 7, 2, 4, 19, 10, 4, 9, 5, 8, 10]
[2, 4, 4, 4, 5, 7, 7, 8, 9, 10, 10, 19]
def quick_sort(ql,start, end):
if start > end:
return
mark = ql[start]
i, j = start, end
while i<j:
while i<j and ql[j] >= mark:
j -= 1
while i<j and ql[i] <= mark:
i += 1
ql[i], ql[j] = ql[j], ql[i]
ql[start], ql[i] = ql[i], ql[start]
quick_sort(ql,start, i-1)
quick_sort(ql, i+1, end)
python 实现快速排序的更多相关文章
- Python与快速排序
这个算法系列主要是自己学习算法过程中动手实践一下,写这个文章作为笔记和分享个人心得,如有错误请各位提出. 注:转载请说明出处 问题提出: 将以下数据升序排列:5, 2, 8, 6, 4, 9, 7, ...
- python实现快速排序
最近在公司的工作内容发生变化,短期内工作量变少了,这也让我有时间整理一些日常学习和工作中的收获或思路.所以申请了博客,并打算持续更新. 快速排序采用了分治的思想,基本思想是选取数组中一个数为基准数(一 ...
- Python实现快速排序--数据结构
快速排序(Quick Sort) 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个元素要O(nlogn)次比较.在最坏状况下则需要O(n^2)次比较,但这种状况并不常见.事实上,快速 ...
- python实现快速排序算法
快速排序算法又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, 排序n个项目要O(nlogn)次比较.在最坏状况下则需要O(n*2) ...
- $用python实现快速排序算法
本文主要介绍用python实现基本的快速排序算法,体会一下python的快排代码可以写得多么简洁. 1. 三言两语概括算法核心思想 先从待排序的数组中找出一个数作为基准数(取第一个数即可),然后将原来 ...
- 【python】快速排序
快速排序思想和C++的差不多,主要是通过写排序对python的语法更加了解. # 快速排序 def qsort(arr, left, right): if left >= right: retu ...
- python 实现快速排序和插入排序
def quick_sort(data): if len(data)<2 or (len(data)==2 and data[0]<=data[1]): #[2,3]此情况会死循环 所以加 ...
- python之快速排序
快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...
- Python 双向链表 快速排序
1.创建链表: from random import randint class DLinkedNode(object): def __init__(self, data=None, pre=None ...
随机推荐
- C++ 标准 和 C 标准 (截止到2019年03月)
C++ 标准:维基百科 Year C++ Standard Informal name 1998 ISO/IEC 14882:1998[23] C++98 2003 ISO/IEC 14882:200 ...
- Java监控类库Metrics
Gauge含义:瞬时值值类型:不限 Counter:作用:可以insr, decr 的计数器值类型:数字 Histogram:含义:maximum, mean, etc., it also measu ...
- May 23. 2018 Week 21st Wednesday
You should love and take care of yourself because after all, it is your own life. 要学会爱自己,照顾自己,毕竟生活是你 ...
- 【Teradata 】TD最大列数
1.一个表最大列数限制是多少? DB2,表最大列数1012,视图最大列数5000:一行最大长度32677Byte Teradata 表最大列数和视图最大列数2048,:16版本前,一行最大长度为64k ...
- w3m 在ubuntu中的使用
w3m 使用总结 安装 sudo apt install w3m终端 w3m www.baidu.com 即可打开w3m是个开放源代码的命令行下面的网页浏览器.一般的linux系统都会自带这个工具,可 ...
- [转]Jquery 点击图片在弹出层显示大图
这个还行不需要别的包! https://www.cnblogs.com/antis/p/7053991.html
- Integer判断大于 == 127时的坑
在一次判断返回Interger类型的code, 用==结果, 没进去 Integer的值在-128到127时,Integer对象是在IntegerCache.cache产生,会复用已有对象,也就是说 ...
- linux 压缩文件或文件夹
zip demo.mp4.zip demo.mp4 zip -r videos.zip videos # 压缩文件夹需要加-r
- P1451 求细胞数量(广搜)
题意:就是0把是所有细胞圈起来了.而被圈起来的是所有数字全部为一个细胞问有多少个这样的细胞.(mmp,我读半天题) 思路:广搜索.就是,0的话就不放入了,不为0的话,就进入队列,然后,再看它的4个方向 ...
- 路飞学城-Python开发集训-第5章
面向过程:核心是过程二字,过程是解决问题的步骤,相当于设计一条流水线,是机械式的思维方式 优点:复杂的问题流程化,进而简单化 缺点:可扩展性差 面向对象:核心是对象二字,对象就是特征与技能的结合体. ...