数据结构算法--2 冒泡排序,选择排序,插入排序
基础排序算法
冒泡排序
思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。

这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素.
第二轮排序结束后,数列右侧的有序区有了两个元素.

由于该排序算法每一轮都要遍历所有元素,平均时间复杂度为O(n*n)
def bubble_sort(li): for i in range(len(li)-1): # 第i趟for j in range(len(li)-i-1):if li[j]>li[j+1]: # 降序就改一下符号li[j],li[j+1]=li[j+1],li[j] li=[random.randint(1,100) for i in range(20)]
bubble_sort(li)
print(li)
如果在某一趟排序中列表没有发生变化,认为已经排好序,这时如果for循环遍历就极大浪费时间,我们可以加每一趟遍历前加一个标志位,在交换元素的代码处加一个修改标志位,这样就可以避免最坏情况出现.
def bubble_sort(li):for i in range(len(li)-1):exchange=Falsefor j in range(len(li)-i-1):if li[j]>li[j+1]:li[j],li[j+1]=li[j+1],li[j]exchange=Trueprint(li) # 看每一趟的变化if not exchange:return
选择排序
基础思想为将列表中最小元素依次遍历筛选出来,最终得到一个有序列表
def select_sort_simple(li):li_new=[]for i in range(len(li)): # 一共需要拿i次min_val=min(li)li_new.append(min_val)li.remove(min_val)return li_new
这个算法虽然简单但是浪费内存,我们可以在列表内部遍历,找到最小元素后与第一个元素交换位置,左侧有序区就有了第一个元素.
def select_sort(li):for i in range(len(li)-1): # i趟,每次都把最小的放到前边交换min_loc=i # 默认第一个最小,与后边遍历比较for j in range(i+1,len(li)):if li[j]<li[min_loc]:min_loc=j # 目前的最小元素索引li[i],li[min_loc]=li[min_loc],li[i]return li
插入排序

^ 初始时手里(有序区)只有一张牌(默认为元素第一个值)。
^ 每次从无序区(列表右侧区)摸一张牌(依次遍历),插入到有序区的正确(按大小)位置。
def insert_sort(li):for i in range(1,len(li)): # 功n-1趟,i表示摸到牌的下标tmp=li[i] # 每次摸的牌j=i-1 # 手里最右侧的while j>=0 and li[j]>tmp: # 一直往左走li[j+1]=li[j] # 右移j-=1li[j+1]=tmp # 选好位置了
可以看出插入排序时间复杂度为O(n*n)
相关文章:
数据结构算法--2 冒泡排序,选择排序,插入排序
基础排序算法 冒泡排序 思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一…...
秋招面经——快手
Mysql mysql事务 共享锁与排他锁 共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。(读都允许读,但我在读不允许你去改) 排他锁:允许一个事务去读一行,阻止其他事务获得相同…...
【STM32RT-Thread零基础入门】 2. 新建RT-Thread项目
硬件:STM32F103ZET6、ST-LINK、usb转串口工具 文章目录 前言一、新建RT-Thread项目二、项目结构三、构建项目四、下载程序(调试器下载)五、终端交互总结 前言 RT-Thread的全称是Real Time Thread,顾名思义,它是一个嵌…...
别人直播的时候怎么录屏?分享一些录屏方法
随着互联网的快速发展,直播已经成为人们日常生活中不可或缺的一部分。但是,有时候我们可能会错过某些重要的直播内容,这时候就需要录屏来保存和观看。那么,如何录屏别人的直播呢?本文将分享一些录屏方法和技巧&#…...
React Native 在高IOS版本下无法显示图片的问题处理
图片在低ios版本下可以看到图片,在高版本ios下显示不了图片 直接上解决方法 找文件 /node_modules/react-native/Libraries/Image/RCTUIImageViewAnimated.m 修改源码 原代码 if (_currentFrame) {layer.contentsScale self.animatedImageScale;layer.contents…...
SSH远程连接MacOS catalina并进行终端颜色配置
一、开关SSH服务 在虚拟机上安装了MacOS catalina,想要使用SSH远程进行连接,但是使用“系统偏好设置”/“共享”/“远程登录”开关进行打开,却一直是正在启动“远程登录”: 难道是catalina有BUG?不过还是有方法的&…...
用JSON.toJSONString转JSON时,属性的值为null时,输出的JSON里没有该属性
1、问题 用JSON.toJSONString转JSON时,当属性值为null的话,转出来的JSON里没有了值为null的属性,属性丢失了 2、原因 用fastjson将java对象转json字符串时会默认去除空字段 2、解决办法 在JSON.toJSONString方法加上SerializerFeature这一…...
Java版企业电子招标采购系统源码—企业战略布局下的采购寻源tbms
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以…...
轻拍牛头(约数)
题意:求ai在n个数中,ai可以整除的数有多少个,不包括ai自己。 分析:暴力写需要n^2的时间复杂度,此时想一下预处理每个数的倍数,约数和倍数是有关系的,把每个数的倍数都加上1. #include<bits…...
Vc - Qt - 绘制窗口背景色
要在Qt中绘制一个背景颜色,你可以使用Qt的绘图功能来完成。下面是一种简单的方法: 步骤1:在你想要绘制背景颜色的QWidget(例如QMainWindow或QDialog)的派生类中,重写 它的paintEvent函数。步骤2:…...
js和cocos creator学习笔记
1.Javascript有哪些数据类型?举例两个最常见的内置对象数据类型? 常用的数据类型:Number,String,Boolean,Null,Undefined,Object 常见内置对象:Array,Function2.下面代码输出内容是什么? let a []; a[10] 10; console.log(a.length); console.log(a[0]); a[200] undefi…...
Ceph分布式存储系统
Ceph 是一个开源的分布式存储系统,旨在提供高性能、高可靠性和可扩展性的存储解决方案。它被设计用于管理大规模的数据,可以轻松地扩展到数千台服务器和多个存储节点,适用于私有云、公有云、虚拟化环境等多种场景。 Ceph 的主要特点和组件包…...
阿里云SMS,APi接口返回错误码
API错误码 更新时间:2023-06-29 16:33提交缺陷 产品详情 相关技术圈 我的收藏 调用API接口失败时,会返回错误码。本文档为您提供API接口错误码列表,请根据错误码和对应错误信息排查问题。 错误码(Code) 错误信息…...
Floyd算法
正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。 Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能ÿ…...
SpringBoot究竟应该如何学习?
如果你有Spring的基础,学习Spring Boot就很简单了。 首先要知道Spring Boot是建立在Spring框架之上的,它旨在简化和加速Java应用程序的开发过程。 Spring Boot的目标是简化Spring应用程序的配置和开发,通过提供自动配置、快速开发和零配置的…...
为什么很多人认为ChatGPT最好的替代工具是Claude?
ChatGPT引领着生成式AI聊天机器人领域,但Claude AI看起来是一个有力的竞争者。 前段时间,ChatGPT的强劲竞争对手Claude2面世。当时很多人认为它可能会取代ChatGPT,在体验过一段时间之后,深以为然。原因如下: 更强大的…...
学习Vue:简介和优势
什么是 Vue.js? Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它专注于视图层,并且可以轻松地集成到现有的项目中。Vue.js 的设计理念是渐进式,这意味着您可以根据项目的需要逐步引入 Vue.js,从而更好地控制应用的复…...
***is not a commit and a branch ‘***‘ cannot be created from it 报错
git执行如下代码 git checkout -b daily/1.0.0 origin/daily/1.0.0遇到报错 fatal: ‘origin/daily/1.0.27’ is not a commit and a branch ‘daily/1.0.27’ cannot be created from it 解决办法: git fetch --all原因: 报错说is not a commit而不是说branch doesn’t exis…...
QT信号槽连接方式
1.QT信号槽主要分两个连接方式,手动和自动: 1.1 使用 connect() 函数手动连接信号和槽: QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot())); 自动: 1.2 使用 lambda 表达式连接信号和槽: connect(s…...
【yml文件的解释】
目录 一、yml的简介二、手写yml文件进行配置三、使用yaml格式导出生成模板四、deployment.yaml文件详解五、Pod yaml文件详解六、Service yaml文件详解 一、yml的简介 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式:主要用于 api 接口之间消息的传递 Y…...
[开源] 急诊分诊能力闯关训练系统:面向护士与临床教学的可视化季票式技能成长平台
本项目是专为急诊科护士、进修生及实习生设计的分诊判断力训练工具,以「病例闯关 季票进度 多维反馈」为核心机制,将抽象的分诊能力拆解为20个难度递进的实战关卡。我们不做泛泛而谈的题库,而是用时间压力、星级评价、连胜激励和薄弱点定位…...
SketchUp STL插件:5分钟快速掌握3D打印模型转换的完整免费指南
SketchUp STL插件:5分钟快速掌握3D打印模型转换的完整免费指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl Sk…...
Unity Android打包卡在detecting sdk tools version的根因与四套解决方案
1. 这个卡在“detecting current sdk tools version”的坑,我踩了三次才摸清门道 Unity打包时卡在“detecting current sdk tools version”这行日志上,光标静止、进度条不动、CPU占用率忽高忽低——你点开Android SDK目录,发现tools文件夹里…...
CoreSight MTB-M33勘误文档解析与嵌入式开发实践
1. CoreSight MTB-M33 勘误文档解析作为一名长期从事嵌入式开发的工程师,我深知芯片勘误文档(Errata Notice)在实际项目中的重要性。今天要讨论的这份CoreSight MTB-M33勘误文档,是每个使用Cortex-M33处理器的开发者都必须仔细研读…...
为Hermes Agent自定义Provider并接入Taotoken服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Hermes Agent自定义Provider并接入Taotoken服务 Hermes Agent 是一个流行的智能体开发框架,它支持通过配置不同的模型…...
Wireshark实战识别与防御ARP欺骗攻击
1. 为什么ARP欺骗不是“黑客电影”里的特效,而是你每天都在裸奔的真实风险 很多人第一次听说ARP欺骗,是在某部电影里看到主角敲几行命令,对面电脑就突然断网、弹出奇怪窗口、甚至开始自动转账——然后心里一紧:“这玩意儿真能这么…...
对比直接使用厂商API体验Taotoken在路由与容灾方面的优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在路由与容灾方面的优势 在开发基于大模型的应用时,开发者通常会面临一个选择&#x…...
AI搜索将如何重构信息获取链路:3大底层范式迁移、4类已验证商业落地路径及2025关键拐点预警
更多请点击: https://intelliparadigm.com 第一章:AI搜索将如何重构信息获取链路:3大底层范式迁移、4类已验证商业落地路径及2025关键拐点预警 从关键词匹配到语义意图理解 传统搜索引擎依赖倒排索引与TF-IDF加权,而AI搜索以多模…...
从‘拍脑袋’到‘有章法’:用Python实战Embedded与Wrapper方法,为你的模型精准选特征
从‘拍脑袋’到‘有章法’:Python实战Embedded与Wrapper方法的高阶特征选择指南在金融风控和医疗诊断这类对模型精度要求严苛的领域,数据科学家们常常面临这样的困境:当特征数量膨胀到数百甚至上千维时,盲目依赖过滤法选特征就像在…...
ChatGPT企业版知识库构建全流程:从非结构化PDF到可审计问答系统的48小时极速上线方案
更多请点击: https://kaifayun.com 第一章:ChatGPT企业版核心能力概览 ChatGPT企业版面向中大型组织设计,聚焦数据安全、系统集成与规模化部署三大支柱,在保留通用大模型强大语言理解与生成能力的同时,强化了企业级可…...
