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批量修改文件编码格式的方法
May 31 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
详解python持久化文件读写
Apr 06 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
python+rsync精确同步指定格式文件
Aug 29 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
Python @property及getter setter原理详解
Mar 31 Python
使用keras实现孪生网络中的权值共享教程
Jun 11 Python
详解pycharm配置python解释器的问题
Oct 15 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
Python 循环读取数据内存不足的解决方案
May 25 Python
手把手教你使用TensorFlow2实现RNN
一篇文章弄懂Python关键字、标识符和变量
python开发飞机大战游戏
详解Python中下划线的5种含义
Python操作CSV格式文件的方法大全
openstack中的rpc远程调用的方法
Python实现查询剪贴板自动匹配信息的思路详解
You might like
第五节--克隆
2006/11/16 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
几个有趣的Javascript Hack
2010/07/24 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
用js实现放大镜效果
2020/10/28 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
2018/05/19 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
Tensorflow 实现释放内存
2020/02/03 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
爸爸的花儿落了教学反思
2014/02/20 职场文书
工程师岗位职责规定
2014/02/26 职场文书
工作保证书
2015/01/17 职场文书
担保书范文
2015/01/20 职场文书
廉政承诺书范文
2015/04/28 职场文书
民间借贷借条范本
2015/05/25 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python