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 ...
随机推荐
- sed:-e 表达式 #1,字符 10:未终止的“s”命令
执行shell脚本时,使用sed变量替换指定的字符串,一直出现这个错误: [root@bqh-118 scripts]# vim while_rz.sh [root@bqh-118 scripts]# ...
- C++实现第三方资源释放与载入过程(以DLL为例)
简介 我们经常看见有一些程序开始执行时会释放一些文件,以便于后续操作.例如一些病毒为了便于传播和隐藏,经常把一些需要用的动态库或是驱动文件打包进一个可执行文件中,再由需要使用的时候,再临时释放和加载. ...
- MATLAB简易画图2—普通直角坐标系
MATLAB简易画图2—普通直角坐标系 本人的MATLAB版本为: 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 继续在“MATLAB简易画图”这篇随 ...
- ABAP 7.50 新特性 – Open SQL中的宿主表达式和其它表达式
在长期的停滞后,Open SQL的发展终于从沉睡中醒来.从ABAP 7.40开始,SAP推进了某些关键的改变,以尽可能地包含SQL92中的特性,并提供与ABAP CDS中的DDL里面的SELECT一样 ...
- 【Linux基础】Linux更改系统IP
1.SUSE系统 (1)设置IP cd /etc/sysconfig/network/ vi ifcfg-eth0 BOOTPROTO='static' #静态IPBROADCAST='192.1 ...
- wangedit
<template> <el-row id="AddRoom"> <el-col :span="5">.</el-co ...
- 自适应:用JS做的自适应,是最差的自适应,记页面刷新前后尺寸变化
今天遇到一个硬茬,我在使用weui重构一个页面时,出现一个问题:路由进入页面时,页面内容尺寸硬是会变大,刷新后又恢复正常: 项目背景:一个使用react-starter-kit构建的B端SPA项目 上 ...
- UEditor学习笔记1
首先对于前段时间遇到的一些总结做下记录: 0 == '' => true transition,渐变属性,其值可以是某属性,也可以是all,如transition: all 0.3s:鼠标放到 ...
- 解决y7000笔记本ubuntu下wifi无法连接问题
查看wifi与蓝牙硬件开关,发现ideapad的硬件模块都是关闭的 rfkill list all 打开终端 输入 sudo gedit /etc/rc.local 写入以下内容 进行保存 #!/bi ...
- Spring Boot web API接口设计之token、timestamp、sign
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/vbirdbest/article/details/80789817一:token 简介Token:访 ...