Python 冒泡排序、归并排序、快速排序
冒泡排序
原理:

代码:
def bubble_sort2(arr):
for j in range(len(arr) - 1, 0, -1): # [n-1, n-2, ....2, 1]
for i in range(0, j):
if arr[i] > arr[i + 1]:
arr[i], arr[i + 1] = arr[i + 1], arr[i]
bubble_sort2(arr)
print(arr) # [1, 3, 4, 7, 8, 34, 67]
归并排序
原理:

代码:
#分解方法
def fenjie(arraylist):
arraylen = len(arraylist)
if arraylen == 1:
return arraylist
if arraylen < 1:
return []
#获取中间索引值
zjz=(arraylen>>1)
#获取左半部分
listleft = fenjie(arraylist[:zjz])
#获取右半部分
listright = fenjie(arraylist[zjz:])
#将参数传递给合成方法并调用该方法
return hecheng(listleft,listright)
#合成方法
def hecheng(listleft,listright):
leftIndex = 0
rightIndex = 0
leftlen = len(listleft)
rightlen = len(listright)
retlist=[]
# 循环比较
while leftIndex<leftlen and rightIndex<rightlen:
if listleft[leftIndex] < listright[rightIndex]:
retlist.append(listleft[leftIndex])
leftIndex += 1
else:
retlist.append(rightlist[rightIndex])
rightIndex +=1
if leftIndex < leftlen:
while leftIndex < leftlen:
retlist.append(listleft[leftIndex])
leftIndex += 1
if rightIndex <rightlen:
while rightIndex < rightlen:
retlist.append(listright[rightIndex])
rightIndex +=1
return retlist
快速排序:

代码:看一下代码时,要注意或者记住i>j 不做更换,因为while i<right and array[i] <= array[right]: i += 1判断的是左边小右边大 i 就加1,i值会越来越大,造成 i>j顾不用更换位置 ;
i<j时,要做更换,因为i j>left and array[j] > array[right]: j -=1 判断的是左边大右边小,j值越来越小,造成i<j顾需要 array[i],arry[j]=array[j],arryay[i] 进行更换位置。
代码如下:
#该方法是排序并取得中间的索引值
def partition(array,left,right):
i = left
j = right -1
while i<j:
while i<right and array[i] <= array[right]:
i+=1
while j>left and array[j]>array[right]:
j-=1
if i<j:
array[i],array[j]=array[j],array[i]
i+=1
j-=1
if array[i]>array[right]:
array[i],array[right] = array[right],array[i]
return i
#该方法是递归进行调用
def quicksort(array,left,right):
if left < right:
pivot = partition(array,left,right)
quicksort(array,left,pivot-1)
quicksort(array,pivot+1,right)
if __name__ == '__main__':
array = [3,2,1,0,9,8,6,6,6,4]
quicksort(array,0,9)
print(array)
Python 冒泡排序、归并排序、快速排序的更多相关文章
- Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。
Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...
- python 实现冒泡排序与快速排序 遇到的错误与问题
今天看了兄弟连php里面的冒泡排序与快速排序,想了下应该可以用python实现. 冒泡排序函数: def mysort(x): len1 = len(x) for i in range(len1-1, ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- PHP描述冒泡排序和快速排序算法
使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组.写一个二维数组排序算法函数,能够具有通用 ...
- JavaScript实现冒泡排序、快速排序、插入排序
JavaScript实现冒泡排序.快速排序.插入排序 时间:2014-01-09 18:05:51 来源: 作者:胡晗 冒泡排序的基本思想:所谓冒泡就是泡泡一个一个往上冒,让体积最轻的泡泡浮在最上 ...
- js 冒泡排序与快速排序
刚好今晚看了js的冒泡排序跟快速排序,趁着还没忘记先记下来. 1. 冒泡排序:遍历数组,每个元素都与后一个元素比较,如果大于下一个元素,则两个元素位置调换.否则的话当前元素再与下下个元素比较,一直到 ...
- 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序
又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ...
随机推荐
- 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
20172328 2018-2019<Java软件结构与数据结构>第七周学习总结 概述 Generalization 本周学习了第11章:二叉查找树.在本章中,主要探讨了二叉查找树的概念和 ...
- 把.Net开发环境迁移到Linux上去
.Net Core发布之前,多年来,.Net程序员的开发环境都在Windows上. 三街第一帅的我,虽然上班的8小时一直在windows上撸C#,但是下班时间一般都在搞其他的乱七八糟的东西,比如写写小 ...
- 深入理解Java虚拟机阅读心得(二)
垃圾收集 程序计数器.虚拟机栈.本地方法栈三个区域随线程而生,随线程而灭:这几个区域的内存分配和回收都具备稳定性,不需要过多的考虑回收的问题.而Java堆和方法区则不一样. Java堆中存储了几乎所有 ...
- Mocha+should+Karma自动化测试教程
Mocha+should+Karma自动化测试教程 一.了解TDD与BDD 首先,为什么我们了解TDD与BDD的是什么意思? 在实际项目中,大部分都是采用BDD的形式进行开发,也就是行为驱动开发. T ...
- 执行Python出现LookupError: unknown encoding: cp65001解决办法
执行Python出现LookupError: unknown encoding: cp65001错误 dos下执行以下命令即可 chcp 以上.
- DWM1000 三基站一标签定位HEX
蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 HEX 下载链接参见论坛:http://bphero.com.cn/forum.php?mod=viewthr ...
- visual studio的包含目录配置问题
早上将一个项目从debug x64修改到release x64,然后包含目录都是直接从debug拷贝过来的,一模一样的路径,一直说无法include,并且路径中的文件都是存在的,配置页面的releas ...
- VB开发类似IIS简易的WebServer,代码不到100行
最近遇到三个人问关于VB写网页服务器的问题,所以今天抽时间写一下,演示其实没有多复杂. 代码里自定义的方法只有四个,没有公共变量绕来绕去,该注释的也都注释了. 想扩展更复杂的功能,就需要自己补脑HTT ...
- 【自动化测试】robot framwork的一点小发现
我们在搭建完robotframwork框架并开始打开火狐浏览器的时候,总会碰到打不开浏览器的问题.这次,分享一个常见的小问题. 这个问题呢,是因为火狐的版本更新频繁,导致selenium的版本跟不上导 ...
- (93)Wangdao.com_第二十六天_鼠标事件
鼠标事件 与鼠标相关的事件,继承了 MouseEvent 接口 分类: click 按下鼠标(通常是按下主按钮)时触发. mousedown 首先触发,mouseup 接着 ...