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面 ...
随机推荐
- 2017-11-4—稳态和暂态/瞬态(对运放积分电路的思考)[待仿真]
先直接截图了,暂态或者说瞬态都是暂时的状态,是从一个稳定态到另一个稳定态的过程. 之所以要了解这个概念是因为对于使用运放搭建的模拟PID有很多的疑惑,比如负反馈没有电阻满不满足"虚短&quo ...
- Mysql5.7 单表 500万数据迁移到新表的快速实现方案
开发过程中需要把一个已有500万条记录的表数据同步到另一个新表中,刚好体验下Mysql官方推荐的大数据迁移的方案:SELECT INTO OUTFILE,LOAD DATA INFILE Mysql ...
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
1. GUI 按题意判断即可. #include<stdio.h> #include<iostream> #include<string.h> #include&l ...
- 06-JDBC
JDBC > JAVA Database Connectivity java 数据库连接 * 为什么会出现JDBC > SUN公司提供的一种数据库访问规则.规范, 由于数据库种类较多,并且 ...
- __x__(7)0905第二天__HTML的发展
HTML的发展 浏览器各个厂商有不同的标准,一个网页的兼容性非常差. 于是,W3C出来了,作为公益组织定义了HTML标准. 在 1993.6 实现并发布了第一个 HTML. 在 1995.11 开始创 ...
- js 工厂模式、简单模式、抽象模式
简单工厂模式又称为静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例,主要用来创建同一类的对象.其实,工厂模式的思想主要是将相同/相似的的对象或类进行提取归类,这样的话,就可以避免写太多重复性 ...
- 基于贝叶斯算法实现简单的分类(java)
参考文章:https://blog.csdn.net/qq_32690999/article/details/78737393 项目代码目录结构 模拟训练的数据集 核心代码 Bayes.java pa ...
- 添加spring-boot-devtools热部署报错
使用的eclipse部署的spring boot,百度了下,大部分的问题都是说IDE工具使用热部署无法成功的解决方案,看了很懵逼 <!-- 热部署模块 --> <dependency ...
- Spring Session event事件分析
1. org.apache.catalina.session.StandardSession 这是servlet-api jar包中的一个类.是session接口的标准实现.当session创建的时候 ...
- Wpf DataGrid 自动滚动到最后一行
if (mainDataGrid.Items.Count > 0) { var border = VisualTreeHelper.GetChild(mainDataGrid, 0) as De ...