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面 ...
随机推荐
- 一个div实现白眼效果
巧妙利用border和background-clip <div class="eye"></div> .eye{ width:150px; height ...
- 2018-2019-1 20189201《Linux内核原理与分析》第四周作业
1. 阴天☁️ 你说你爱烟雨微茫,雨来时你却伞遮霓裳: 你说你爱春光灿烂,阳光普照时你却孑然惆怅: 你说你爱微风轻柔,风拂发梢时你却紧闭门窗: 这便是为何你说你也深深爱我,我却眼波成霜. 2. 今日发 ...
- 03-Python入门学习-Python基础
一.与用户交互 1.什么是与用户交互 程序等待用户输入一些数据,然后程序执行完毕后为用户反馈信息 2.为何程序要与用户交互 为了让计算机能够像人一样与用户的交互 3.如何用 在python3中:inp ...
- NEERC-2017
A. Archery Tournament 用线段树套set维护横坐标区间内的所有圆,查询时在$O(\log n)$个set中二分查找即可. 时间复杂度$O(n\log^2n)$. #include& ...
- helm-chart5,模板和访问文件
提供的一些声明和使用命名模板段的操作: define在模板中声明一个新的命名模板 template导入一个命名模板 block 声明了一种特殊的可填写模板区域 首先,模板名称是全局的.如果声明两个具有 ...
- js之promise讲解
1 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个对象,也就是说与其他JavaScript ...
- HTML入门8
今天开始接触HTML里面的多媒体和嵌入内容 前面只讲了文字,下面来讲能够让网页动起来,更加有趣的嵌入元素,包含多媒体,包含图像的不同方式,以及怎样嵌入视频. HTML中图片,下面将深入使用它,以及&l ...
- HTML列表与表格
border:控制边框 width:宽度 height:高度 table是表格 tr:行 td:列★ colspan:合并列★rowspan:合并行★ <!doctype html> &l ...
- Ringo替换Paul
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- BtxCMS.Net 项目
项目: 广告位:<script type="text/javascript" src="http://yg1.jmcdn.cn/file/script/A538.x ...