当前位置: 首页 > news >正文

数据结构算法--2 冒泡排序,选择排序,插入排序

  基础排序算法

        冒泡排序

思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。

012c2ec6bb0e46aea56ab0d18dfb1125.jpeg

 

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

第二轮排序结束后,数列右侧的有序区有了两个元素.

8d36f60ad52745eeb86880d49d7f3a9a.jpeg

 由于该排序算法每一轮都要遍历所有元素,平均时间复杂度为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

        插入排序

469efdd8a7d14de9a1a9dfc108f5d401.png

 

^ 初始时手里(有序区)只有一张牌(默认为元素第一个值)。

^ 每次从无序区(列表右侧区)摸一张牌(依次遍历),插入到有序区的正确(按大小)位置。

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 冒泡排序,选择排序,插入排序

基础排序算法 冒泡排序 思想就是将相邻元素两两比较&#xff0c;当一个元素大于右侧相邻元素时&#xff0c;交换他们的位置&#xff0c;小于右侧元素时&#xff0c;位置不变&#xff0c;最终序列中的最大元素&#xff0c;像气泡一样&#xff0c;到了最右侧。 这时冒泡排序第一…...

秋招面经——快手

Mysql mysql事务 共享锁与排他锁 共享锁&#xff1a;允许一个事务去读一行&#xff0c;阻止其他事务获得相同数据集的排他锁。&#xff08;读都允许读&#xff0c;但我在读不允许你去改&#xff09; 排他锁&#xff1a;允许一个事务去读一行&#xff0c;阻止其他事务获得相同…...

【STM32RT-Thread零基础入门】 2. 新建RT-Thread项目

硬件&#xff1a;STM32F103ZET6、ST-LINK、usb转串口工具 文章目录 前言一、新建RT-Thread项目二、项目结构三、构建项目四、下载程序&#xff08;调试器下载&#xff09;五、终端交互总结 前言 RT-Thread的全称是Real Time Thread&#xff0c;顾名思义&#xff0c;它是一个嵌…...

别人直播的时候怎么录屏?分享一些录屏方法

​随着互联网的快速发展&#xff0c;直播已经成为人们日常生活中不可或缺的一部分。但是&#xff0c;有时候我们可能会错过某些重要的直播内容&#xff0c;这时候就需要录屏来保存和观看。那么&#xff0c;如何录屏别人的直播呢&#xff1f;本文将分享一些录屏方法和技巧&#…...

React Native 在高IOS版本下无法显示图片的问题处理

图片在低ios版本下可以看到图片&#xff0c;在高版本ios下显示不了图片 直接上解决方法 找文件 /node_modules/react-native/Libraries/Image/RCTUIImageViewAnimated.m 修改源码 原代码 if (_currentFrame) {layer.contentsScale self.animatedImageScale;layer.contents…...

SSH远程连接MacOS catalina并进行终端颜色配置

一、开关SSH服务 在虚拟机上安装了MacOS catalina&#xff0c;想要使用SSH远程进行连接&#xff0c;但是使用“系统偏好设置”/“共享”/“远程登录”开关进行打开&#xff0c;却一直是正在启动“远程登录”&#xff1a; 难道是catalina有BUG&#xff1f;不过还是有方法的&…...

用JSON.toJSONString转JSON时,属性的值为null时,输出的JSON里没有该属性

1、问题 用JSON.toJSONString转JSON时&#xff0c;当属性值为null的话&#xff0c;转出来的JSON里没有了值为null的属性&#xff0c;属性丢失了 2、原因 用fastjson将java对象转json字符串时会默认去除空字段 2、解决办法 在JSON.toJSONString方法加上SerializerFeature这一…...

Java版企业电子招标采购系统源码—企业战略布局下的采购寻源tbms

​ 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以…...

轻拍牛头(约数)

题意&#xff1a;求ai在n个数中&#xff0c;ai可以整除的数有多少个&#xff0c;不包括ai自己。 分析&#xff1a;暴力写需要n^2的时间复杂度&#xff0c;此时想一下预处理每个数的倍数&#xff0c;约数和倍数是有关系的&#xff0c;把每个数的倍数都加上1. #include<bits…...

Vc - Qt - 绘制窗口背景色

要在Qt中绘制一个背景颜色&#xff0c;你可以使用Qt的绘图功能来完成。下面是一种简单的方法&#xff1a; 步骤1&#xff1a;在你想要绘制背景颜色的QWidget&#xff08;例如QMainWindow或QDialog&#xff09;的派生类中&#xff0c;重写 它的paintEvent函数。步骤2&#xff1a…...

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 是一个开源的分布式存储系统&#xff0c;旨在提供高性能、高可靠性和可扩展性的存储解决方案。它被设计用于管理大规模的数据&#xff0c;可以轻松地扩展到数千台服务器和多个存储节点&#xff0c;适用于私有云、公有云、虚拟化环境等多种场景。 Ceph 的主要特点和组件包…...

阿里云SMS,APi接口返回错误码

API错误码 更新时间&#xff1a;2023-06-29 16:33提交缺陷 产品详情 相关技术圈 我的收藏 调用API接口失败时&#xff0c;会返回错误码。本文档为您提供API接口错误码列表&#xff0c;请根据错误码和对应错误信息排查问题。 错误码&#xff08;Code&#xff09; 错误信息…...

Floyd算法

正如我们所知道的&#xff0c;Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展&#xff0c;三个for循环就可以解决问题&#xff0c;所以它的时间复杂度为O(n^3)。 Floyd算法的基本思想如下&#xff1a;从任意节点A到任意节点B的最短路径不外乎2种可能&#xff…...

SpringBoot究竟应该如何学习?

如果你有Spring的基础&#xff0c;学习Spring Boot就很简单了。 首先要知道Spring Boot是建立在Spring框架之上的&#xff0c;它旨在简化和加速Java应用程序的开发过程。 Spring Boot的目标是简化Spring应用程序的配置和开发&#xff0c;通过提供自动配置、快速开发和零配置的…...

为什么很多人认为ChatGPT最好的替代工具是Claude?

ChatGPT引领着生成式AI聊天机器人领域&#xff0c;但Claude AI看起来是一个有力的竞争者。 前段时间&#xff0c;ChatGPT的强劲竞争对手Claude2面世。当时很多人认为它可能会取代ChatGPT&#xff0c;在体验过一段时间之后&#xff0c;深以为然。原因如下&#xff1a; 更强大的…...

学习Vue:简介和优势

什么是 Vue.js&#xff1f; Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它专注于视图层&#xff0c;并且可以轻松地集成到现有的项目中。Vue.js 的设计理念是渐进式&#xff0c;这意味着您可以根据项目的需要逐步引入 Vue.js&#xff0c;从而更好地控制应用的复…...

***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信号槽主要分两个连接方式&#xff0c;手动和自动&#xff1a; 1.1 使用 connect() 函数手动连接信号和槽&#xff1a; QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot())); 自动&#xff1a; 1.2 使用 lambda 表达式连接信号和槽&#xff1a; connect(s…...

【yml文件的解释】

目录 一、yml的简介二、手写yml文件进行配置三、使用yaml格式导出生成模板四、deployment.yaml文件详解五、Pod yaml文件详解六、Service yaml文件详解 一、yml的简介 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 Y…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...