排序算法:

news/2024/9/18 7:28:31/ 标签: 排序算法, 算法

直接插入排序:

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从前向后或从后向前扫描,找到相应位置并插入。

参考链接:算法>排序算法之插入排序(python实现)_python插入排序-CSDN博客

算法>排序算法——直接插入排序(图文超详细!)-CSDN博客

易错点:

为什么是if nums[j]>nums[i]。

因为nums[j]是已经排序好的,nums[i]是待插入进行比较的。

如果写反了,那么就是从大到小进行排序。

def zhijieinsert(nums):for i in range (len(nums)):if i !=0:for j in range(0,i):if nums[j]> nums[i]:nums[i],nums[j]=nums[j],nums[i]return numsif __name__ == "__main__":nums = [9,8,2,5,6,7,9,5,1]a = zhijieinsert(nums)print(a)

折半插入排序

折半插入排序,和直接插入排序的方法是一样的,左边的都是已经排序排好的。先判断要插入的数据和左边排好的最后一位的元素相比。如果比它小那么就开始折半插入,把想要进行排序的元素防止temp中,防止元素发生变化。取想要插入元素左边元素中最小的为left,取最大的元素为right。mid为中间元素(向下取整)。如果所插元素小于mid则right移动到mid的左边,如果所插元素大于mid则left移动到mide的右边。直到right小于left,left/(right+1)就是所插元素的位置,然后将所插位置后的元素依次往后移动即可。

易错点:注意right=i-1(因为和插入排序类似,左边的是已经排好序的)

for j in range (i-1,right,-1)表示找到了插入元素的位置,移动后续的元素

while left<=right不成立时,表示插入元素的位置找到,然后退出循环

注意if __name__ == "__main__":这里面是两个等号==

def zhebaninsert(nums):for i in range (1,len(nums)):left=0right=i-1temp = nums[i]while left<=right:mid=int((left+right)/2)if temp<nums[i]:right = mid-1else:left = mid+1for j in range (i-1,right,-1):nums[j+1]=nums[j]nums[right+1]=tempreturn nums
if __name__ == "__main__":nums= [1,2,9,4,5,3,7,6,9,2,8]a = zhebaninsert(nums)print(a)

相似题:代码随想录(day1)二分法-CSDN博客

冒泡排序:

从列表的第一个数字开始进行比较,判断该数和下一个数之间的大小关系,如果该数比右边的数大,则交换位置;否则不变。一般一轮可以确定最大的数字,在列表的最后一位。

参考链接:python 冒泡算法>排序算法(超级详细)_冒泡排序python-CSDN博客

代码:

注意:非的写法是not !!!

def buddle(num):for i in range (len(num)-1):flag = Falsefor j in range (len(num)-i-1):if num[j]>num[j+1]:num[j],num[j+1] = num[j+1],num[j]flag = Trueif not flag:break
if __name__ =='__main__':num = [1,2,8,9,6,4]buddle(num)print(num)


http://www.ppmy.cn/news/1520750.html

相关文章

union 的正确食用方法

0.前情提要 &#xff08;很久&#xff09;之前上编译原理时&#xff0c;一次实验课需要补充完善一个用 c 写的词法分析器&#xff1b;而这个分析器在定义语法树结点时使用了 union 存储语言中不同表达式的类型标签或值本身。因为当时刚好学完了 cpp&#xff0c;拿着锤子看啥都…

SQL典型练习题

with可以解决很多想用子表解决的问题 over可以加想加的&#xff0c;改变表的结构 例题&#xff1a; 表(driver)说明&#xff1a;司机登录登出明细表&#xff0c;由于同一司机有可能同时登录两个司机端&#xff0c;所以同一时间段一个司机有可能会产生两条或者更多条数据。 …

九、安装artifactory并配置PostgreSQL--失败了

八、centos7安装mysql5.7-CSDN博客 基于八&#xff0c;克隆出一个新的虚拟机&#xff0c;用来安装制品库并配置mysql数据库。 比较官方的文章&#xff1a; How to install JFrog Artifactory on CentOS 7 | CentLinux 仅参考&#xff0c;未使用&#xff08;配置的centos自带…

网络压缩之参数量化(parameter quantization)

参数量化&#xff08;parameter quantization&#xff09;。参数量化是说能否只 用比较少的空间来储存一个参数。举个例子&#xff0c;现在存一个参数的时候可能是用64位或32位。 可能不需要这么高的精度&#xff0c;用16或8位就够了。所以参数量化最简单的做法就是&#xff0c…

什么是云计算?

1.云计算的概念&#xff1f; 现阶段广为人们所接受的是美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09;给出的定义&#xff1a;“云计算”是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、…

Lua:条件断点

如果有很多方式都要经过这个函数&#xff0c;但是你只需要满足其中例如参数等于Test的这一种&#xff0c;可以在断点处右键点击编辑断点打上条件断点&#xff0c;只有参数EventName等于Test的才会断上。

《JavaEE进阶》----4.<SpringMVC①简介、基本操作(各种postman请求)>

本篇博客讲解 MVC思想、及Spring MVC&#xff08;是对MVC思想的一种实现&#xff09;。 Spring MVC的基本操作、学习了六个注解 RestController注解 RequestMappering注解 RequestParam注解 RequestBody注解 PathVariable注解 RequestPart注解 MVC View(视图) 指在应⽤程序中…

★ 算法OJ题 ★ 力扣 LCR179 - 和为 s 的两个数字

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;小诗歌剧将和大家一起做一道双指针算法题--和为 s 的两个数字~ 目录 一 题目 二 算法解析 三 编写算法 一 题目 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 …

NCH DrawPad Pro for Mac/Win:强大的图像编辑处理软件

NCH DrawPad Pro for Mac/Win是一款功能全面的图像编辑和设计软件&#xff0c;专为Mac和Windows用户设计。它不仅适用于专业设计师&#xff0c;也深受业余爱好者和创意工作者的喜爱。DrawPad Pro凭借其丰富的绘图工具、强大的编辑功能和便捷的模板库&#xff0c;为用户提供了卓…

集成电路学习:什么是LCD液晶显示器

一、LCD&#xff1a;液晶显示器 LCD&#xff0c;全称Liquid Crystal Display&#xff0c;即液晶显示器&#xff0c;是一种平面超薄的显示设备。它由一定数量的彩色或黑白像素组成&#xff0c;放置于光源或者反射面前方。LCD的主要原理是以电流刺激液晶分子产生点、线、面配合背…

五,Spring Boot中的 Spring initializr 的使用

五&#xff0c;Spring Boot中的 Spring initializr 的使用 文章目录 五&#xff0c;Spring Boot中的 Spring initializr 的使用1. 方式1&#xff1a;IDEA创建2. 方式2&#xff1a;start.spring.io 创建3. 注意事项和细节4. 最后&#xff1a; 需要&#xff1a;使用 Spring initi…

ReentrantLock可重入锁又是怎么回事?

前言&#xff1a;有关Synchronized锁的知识可以参考我上篇写的内容synchronized必知必会的知识点 一&#xff1a;ReentrantLock的实现原理 锁的实现原理基本是为了达到一个目的:让所有的线程都能看到某种标记。Synchronized通过在对象头中设置标记实现了这一目的&#xff0c;是…

MFC工控项目实例之十添加系统测试对话框

承接专栏《MFC工控项目实例之九选择下拉菜单主界面文本框显示菜单名》 参考前期我的博客文章《MFC3d立体按钮制作》 这里只给出相关代码 1、在SysTest.h文件中添加代码 #include "ShadeButtonST.h" #include "BtnST.h" class CSysTest : public CDialog {…

H5手机端调起支付宝app支付

1.调起APP页面如下 步骤 1.让后端对接一下以下文档&#xff08;手机网站支付通过alipays协议唤起支付宝APP&#xff09; https://opendocs.alipay.com/open/203/107091?pathHash45006f4f&refapi 2.后端接口会返回一个form提交表单 html&#xff1a;在页面中定义一个d…

C++学习笔记(3)

101、从结构体到类 对面向对象编程来说&#xff0c;一切都是对象&#xff0c;对象用类来描述。 类把对象的数据和操作数据的方法作为一个整体考虑。 定义类的语法&#xff1a; class 类名 { public: 成员一的数据类型 成员名一; 成员二的数据类型 成员名二; 成员三的数据类型 成…

安防监控视频平台LntonAIServer视频智能分析平台新增视频质量诊断功能

随着安防行业的快速发展&#xff0c;视频监控系统已经成为维护公共安全和个人隐私的重要工具。然而&#xff0c;由于各种因素的影响&#xff0c;视频流的质量可能会受到影响&#xff0c;从而导致监控效果不佳。为了解决这一问题&#xff0c;LntonAIServer推出了全新的视频质量诊…

「邀您参会」9月20日 中国可观测日成都站

随着首届中国可观测日上海站的圆满落幕&#xff0c;中国站第二站将于 9 月 20 日在成都盛大开启。在此&#xff0c;我们诚挚邀请您参与这场专注于监控观测领域的技术交流盛会&#xff0c;与行业精英共同探讨可观测性技术的前沿趋势和实践应用。 活动亮点 1、技术交流盛宴&…

什么是rest参数?

Rest参数是JavaScript中的一种特殊参数类型&#xff0c;也称为剩余参数或可变参数&#xff0c;它允许开发者定义一个函数&#xff0c;以便接收不定数量的参数。Rest参数的使用是通过在参数列表末尾添加...符号来实现的&#xff0c;这些额外的参数会被收集到一个数组中&#xff…

Docker 容器编排之 Docker Compose

目录 1 Docker Compose 概述 1.1 主要功能 1.2 工作原理 1.3 Docker Compose 中的管理层 2 Docker Compose 的常用命令参数 2.1 服务管理 2.1.1 docker-compose up &#xff1a; 2.1.2 docker-compose down &#xff1a; 2.1.3 docker-compose start &#xff1a; 2.1.4 docker…

【Qt的TS文件转换器】利用Python实现自动化TS文件转换

TS 文件转换器 在开发多语言Qt应用时&#xff0c;管理和更新翻译文件是一项繁琐但必要的任务。这个工具旨在自动化Qt Linguist TS文件的转换过程&#xff0c;支持不同语言之间的转换&#xff0c;特别关注中文变体和其他语言。 目录 &#x1f30e;背景⭐特性&#x1f512;前提条…