python实现交换排序

2023-11-06

排序算法:
python实现基数排序
python实现归并排序
python实现交换排序
python实现选择排序
python实现插入排序

冒泡排序
基本思想:假设待排序表长为n,从后往前或者从前往后两两比较相邻元素的值,若为逆序则交换它们,直到序列比较完。
每趟冒泡的结果是把待排序序列中的最小元素放到了序列的最终位置,这样最多n-1趟就可以把所有元素排好序。
在这里插入图片描述

def BubbleSort(A):
    le=len(A) #获取元素数目
    for i in range(le-1):#遍历le-1次
        for j in range(i,le):#每一趟冒泡,待排序元素数目都会-1
            if A[j]>A[j-1]:#逆序则交换
                A[j-1],A[j]=A[j],A[j-1]
        print(A)

tes=[23,34,243,1,28,7,56]
BubbleSort(tes)

输出为:

[34, 243, 23, 28, 7, 56, 1]
[243, 34, 28, 23, 56, 7, 1]
[243, 34, 28, 56, 23, 7, 1]
[243, 34, 56, 28, 23, 7, 1]
[243, 34, 56, 28, 23, 7, 1]
[243, 34, 56, 28, 23, 7, 1]

空间效率:使用了常数个辅助单元,因而空间复杂度为O(1)
时间效率:O(n²)
它是一种稳定的排序算法。

快速排序
基本思想:基于分治法,在待排序表L[1…n]中任取一个元素pivot作为基准,通过一趟排序将排序表划分为独立的两部分L[1…k-1]和L[k+1…n].使得L[1…k-1]中所有元素<privot,L[k+1…n]中所有元素>=privot,privot放在它的最终位置L[k],这个过程为一趟快速排序。
然后分别递归地对两个子表重复上述过程,直到每部分只有一个元素或者为空为止,即所有元素都放在了其最终位置。
在这里插入图片描述

def quick_sort(alist, start, end):
    if start >= end:
        return
    low = start
    high = end
    mid = alist[low]
    
    while low < high:
        while low < high and mid < alist[high]:
            # 从右边开始找,如果元素小于基准,则把这个元素放到左边
            high -= 1
        alist[low] = alist[high]
        
        while low < high and mid > alist[low]:
            # 从左边开始找,如果元素大于基准,则把元素放到右边
            low += 1
        alist[high] = alist[low]
    
    # 循环退出,low==high,把基准元素放到这个位置
    alist[low] = mid
    
    # 递归调用,重新排列左边的和右边的序列
    quick_sort(alist, start, low-1)
    quick_sort(alist, low+1, end)

空间效率:由于排序算法是递归的,需要借助一个递归工作栈来保存每一层递归调用的必要信息,其容量应与递归调用的最大深度一致。空间复杂度最坏情况为O(n),平均情况为O(log2 N)
时间效率:最坏为O(n²);最好为O(nlog2 N)
它是一种不稳定的排序算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现交换排序 的相关文章

  • VM VirtualBox运行Ubuntu系统卡顿提速(亲测有效,附图)

    VirtualBox运行Ubuntu系统卡顿提速 亲测有效 附图 亲测有效 卡顿明显减少 欣喜之余 记录备忘 原文教程见下方链接 原文没有图 我把自己操作时的截图放在下面 原文 VirtualBox虚拟机运行Ubuntu如何不卡 记得要把U
  • slam数学基础——最小二乘

    一 前言 1 最小二乘是一类特殊形式的最优化求解问题 相比于其他优化问题 求解方式比较简洁 2 最小二乘被广泛应用于各种实际问题的建模 在求解实际工程问题中有着广泛的应用 例如 slam 中随处可见最小二乘的声影 二 线性最小二乘法 1 预

随机推荐

  • SlideLive:支持图表类PPT模板下载

    简介 在学习和工作中 我们经常需要制作图表类型的PPT SlideLive是一款PPT在线播放和分享的网站 该网站已收录大量的PPT模板 本文主要介绍如何从SlideLive平台下载图表类型PPT模板 下载地址 图表类型模板 SlideLi
  • Unity接入越南社交软件Zalo登录(Android)之SDK接入

    Zalo登录 注册前的准备工作 由于国内网络无法直接打开Zalo页面 因此需要一个较稳定的VPN 创建开发者账号 登录Zalo开发者后台 可以在网页最底部把网页设置为英文 创建自己的应用 1 点击右上角 创建应用 2 创建好应用后记录App
  • 使用FiftyOne下载Open Images指定类别数据

    文章目录 前言 一 FiftyOne Open Images官网链接 二 步骤 1 安装FiftyOne 2 下载Open Images部分类别数据 3 从detections csv中获取下载图片的标注文件 4 可视化图片与标注信息 5
  • Android项目集成穿山甲开屏/插屏/横幅广告教程大全

    Android项目集成穿山甲开屏 插屏 横幅广告教程大全 开发及项目环境说明 Android Studio 2020 3 1 Patch 4 203 7717 56 2031 7935034 jdk11 0 9 Android Gradle
  • Crypto-JS DES加密解密出现的错误

    这几天公司给了一个项目 说为了用户安全性 需要加密 我在网上找了一些加密 发现Crypto JS 挺好的用的 我就用了Crypto JS DES加密 期间出现一些错误 发现这些错误都在我引入的Crypto JS文件里面 刚开始以为文件引入错
  • snpintf()函数会自动添加\0, strncpy()函数不会自动增加\0

    近段时间 在写程序中多次用到snprintf 函数 对于snprintf 函数是否会自动添加 0不能肯定 今天自己就写了一个测试程序进行验证 int len snprintf buf sizeof buf s str 1 当len 的长度小
  • 内核角度谈谈Linux进程和线程

    目录 前言 内核对进程和线程的表示 创建进程的过程 创建线程的过程 创建进程和线程的异同 揭秘 do fork 系统调用 结论 前言 昨天面试的时候 面试官问我了个平平淡淡的问题 gt 聊聊Linux中进程和线程 相比大家不管是在考试还是面
  • OpenWrt系统安全改进<五> --- Web 访问权限分级

    摘要 OpenWrt系统安全改进 lt 四 gt 中介绍的只是在UI层面对用户进行访问控制 对于深层次非法操作并不能起到保护效果 本节介绍针对不同的用户登录请求 使用不同用户启动luci进程 从而实现不同用户进行操作级别的访问控制 机制分析
  • git push -u origin master提示 fatal: repository 'https://gitlab.com/xx.git/' not found

    正解 1 git remote set url origin https gitlab用户名 gitlab com xx demo git 2 git push u origin master 会提示输入密码 输入入正确的gitlab密码即
  • Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.

    data self reader read nrows File pandas libs parsers pyx line 796 in pandas libs parsers TextReader read File pandas lib
  • dl_iterate_phdr

    http www helplib net s linux die 65 1099 man 3 dl iterate phdr shtml http linux die net man 3 dl iterate phdr dl iterate
  • 跨域错误问题has been blocked by cors policy

    这个问题其实是一个跨域调用错误 有多种解决方法 我放到服务器上所以在服务器上的apache的配置文件中修改 一开始以为apache的配置文件是httpd conf 然后发现我压根没有这个文件 在 etc apache2 apache2 co
  • 单手杀穿经典链表题Pt.1——LeetCode天梯渡劫(移除节点,反转链表,中间节点)

    目录 传统艺能 移除链表元素 反转链表 链表的中间结点 传统艺能 小编是双非本科大一菜鸟不赘述 欢迎大佬指点江山 QQ 1319365055 此前博客点我 点我 请搜索博主 知晓天空之蓝 乔乔的gitee代码库 打灰人 欢迎访问 点我 非科
  • 终端配色-Docker容器终端

    20230309 0 引言 平时使用SSH 通常都是使用securecrt来用 毕竟也算是之前windows下一种使用的工具 在mac下使用还算方便 进入终端后 可以通过调整配色来调整编程环境 平时经常使用屎黄色的那种配色 毕竟柔和 偶尔使
  • 计算机的快速启动栏,电脑快速启动栏不见了

    文章目录导航 演示系统及适用范围 演示系统 XP专业版 Windows2003企业版 WIN7旗舰版 适用范围 XP各版本 WIN2003 WIN2008及WIN7各版本系统 xp找回快速启动栏方法 不管是XP或是Winserver2003
  • conda修改环境保存地址

    可以在命令行中通过conda config指令进行修改 如 添加环境目录envs dirs conda config add envs dirs F conda env envs 添加pkgs dirs conda config add p
  • MVC模式、MVVM模式及其区别

    文章目录 MVC模式 MVVM模式 MVVM优点 MVC与MVVM的区别 MVC模式 MVC是应用最广泛的软件架构之一 一般MVC分为 Model 模型 View 视图 Controller 控制器 这主要是基于分层的目的 让彼此的职责分开
  • BUUCTF刷题记录(6)

    文章目录 web FBCTF2019 RCEService GYCTF2020 FlaskApp CISCN2019 华北赛区 Day1 Web5 CyberPunk BSidesCF 2019 Futurella CISCN2019 华东
  • 【STM32技巧】ADC模拟量采集的几种用法

    1 AD单次转换 软件启动 通过程序启动AD AD采集一次 我们就去读一次 这种情况 建议开启AD转换完成中断 在中断中读出AD值并做处理 初始化的时候 启动一次 然后在主循环里 每隔一秒启动一次 在中断回调函数里 进行相关处理 电脑输出如
  • python实现交换排序

    排序算法 python实现基数排序 python实现归并排序 python实现交换排序 python实现选择排序 python实现插入排序 冒泡排序 基本思想 假设待排序表长为n 从后往前或者从前往后两两比较相邻元素的值 若为逆序则交换它们