Python实现排序方法常见的四种


Posted in Python onJuly 15, 2021

1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置

def maopao(a):
    for i in range(0,len(a)):
        for j in range(0,len(a)-i-1):
            if a[j]>a[j+1]:
                temp = a[j+1]
                a[j+1] = a[j]
                a[j] = temp
                #print(a)
        #print(a)
    print(a)

2.选择排序,遍历选择一个最小的数与当前循环的第一个数交换

def xuanze(a):
    for i in range(0,len(a)):
        k=i
        temp = a[i]
        for j in range(i,len(a)):
            if a[j]<temp:
                temp = a[j]
                k = j
        a[k] = a[i]
        a[i] = temp
    print(a)

3.快速排序:将子段的第一个元素做为中值,先从右向左遍历,如过比中值大high-1,如果比中值小,将这个值放到low那里。

然后从左向右开始遍历,如果左侧的比中值大,将他放到high那里。当low>=high时,将中值的值赋给low

(1.以下为参照公众号中的做法:

a =[7,1,3,2,6,54,4,4,5,8,12,34]
def sort(a,low,high): 
    while low < high:
        temp = a[low]
        while low < high and a[high]>=temp:
            high = high-1
        a[low]=a[high]
        while low<high and a[low]<temp:
            low = low+1
        a[high]=a[low]           
        a[low]=temp
    return low
def quicksort(a,low,high):
    if low<high:
        middle = sort(a,low,high)
        quicksort(a,low,middle)
        quicksort(a,middle+1,high)
        print(a)
sort(a,0,len(a)-1)
quicksort(a,0,len(a)-1)
print(a)

(2.以下是参照网上的做法:

在做快速排序时一直各种问题,是因为地柜那里没有考虑清楚,一直把low的值赋值为0了,实际上应该是不固定的low值,他每个子循环不定。

'''
遇到问题没人解答?小编创建了一个Python学习交流群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a =[7,1,3,2,6,54,4,4,5,8,12,34]
def sort(a,low,high): 
    while low < high:
        temp = a[low]
        while low < high and a[high]>=temp:
            high = high-1
        while low<high and a[high]<temp:
            a[low]=a[high]           
            low =low+1
            a[high]=a[low]
        a[low]=temp
    return low
def quicksort(a,low,high):
    if low<high:
        middle = sort(a,low,high)
        quicksort(a,low,middle)
        quicksort(a,middle+1,high)
        print(a)
sort(a,0,len(a)-1)
quicksort(a,0,len(a)-1)
print(a)

4.插入排序:从左向右遍历,依次选取数值,从数值的左侧从右向左遍历,选择第一个比他小的数值的右侧插入该数值,其他数值依次向后赋值

#插入排序
a =[7,1,3,2,6,54,4,4,5,8,12,34]
for i in range(0,len(a)-1):
    temp=a[i+1]
    j=i+1
    while j>=0 and temp<a[j-1]:
        j=j-1      
        print(j)
    if j>=-1:
        k= i+1
        while k>=j:
            a[k]=a[k-1]
            k=k-1
            print(a)
        a[j]=temp
print(a)

插入排序方法2,用到了列表的a.insert(1,2)和清楚a[2:3]=[],这样可以少用一个循环

a =[7,1,3,2,6,54,4,4,5,8,12,34]
for i in range(1,len(a)-1):
    temp=a[i]
   
    j=i-1
    while j>=0 and temp<=a[j]:
        print(temp)
        j=j-1
    if j >=-1:
        a[i:i+1]=[]
        a.insert(j+1,temp)
        print(a)
print(a)

到此这篇关于Python实现排序的四种方法的文章就介绍到这了,更多相关python排序方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python Socket实现简单TCP Server/client功能示例
Aug 05 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
python使用代理ip访问网站的实例
May 07 Python
python3利用tcp实现文件夹远程传输
Jul 28 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
python获取当前文件路径以及父文件路径的方法
Jul 10 Python
Python依赖包整体迁移方法详解
Aug 15 Python
python如何进行矩阵运算
Jun 05 Python
python对一个数向上取整的实例方法
Jun 18 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
详解Python中下划线的5种含义
Python操作CSV格式文件的方法大全
openstack中的rpc远程调用的方法
Python实现查询剪贴板自动匹配信息的思路详解
You might like
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JSON遍历方式实例总结
2015/12/07 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
JS如何生成动态列表
2020/09/22 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
Python for i in range ()用法详解
2020/09/18 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
企业转让协议书(范文2篇)
2019/08/15 职场文书
创业计划书之便利店
2019/09/05 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
Python深度学习之实现卷积神经网络
2021/06/05 Python