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

python排序算法

排序是指以特定格式排列数据。 排序算法指定按特定顺序排列数据的方式。 最常见的排序是数字或字典顺序。
排序的重要性在于,如果数据是以分类方式存储,数据搜索可以优化到非常高的水平。 排序也用于以更易读的格式表示数据。 下面来看看python中实现的5种排序方式。

  • 冒泡排序
  • 合并排序
  • 插入排序
  • 希尔排序
  • 选择排序

冒泡排序

它是一种基于比较的算法,其中每对相邻元素进行比较,如果元素不合适,元素将进行交换。

def bubblesort(list):# Swap the elements to arrange in orderfor iter_num in range(len(list)-1,0,-1):for idx in range(iter_num):if list[idx]>list[idx+1]:temp = list[idx]list[idx] = list[idx+1]list[idx+1] = templist = [19,2,31,45,6,11,121,27]
bubblesort(list)
print(list)

执行上面示例代码,得到以下结果 -

[2, 6, 11, 19, 27, 31, 45, 121]

合并排序

合并排序首先将数组分成相等的一半,然后以排序的方式组合它们。参考以下代码实现 -

def merge_sort(unsorted_list):if len(unsorted_list) <= 1:return unsorted_list
# Find the middle point and devide itmiddle = len(unsorted_list) // 2left_list = unsorted_list[:middle]right_list = unsorted_list[middle:]left_list = merge_sort(left_list)right_list = merge_sort(right_list)return list(merge(left_list, right_list))# Merge the sorted halvesdef merge(left_half,right_half):res = []while len(left_half) != 0 and len(right_half) != 0:if left_half[0] < right_half[0]:res.append(left_half[0])left_half.remove(left_half[0])else:res.append(right_half[0])right_half.remove(right_half[0])if len(left_half) == 0:res = res + right_halfelse:res = res + left_halfreturn resunsorted_list = [64, 34, 25, 12, 22, 11, 90]print(merge_sort(unsorted_list))

执行上面示例代码,得到以下结果 -

[11, 12, 22, 25, 34, 64, 90]

插入排序

插入排序包括为排序列表中的给定元素找到正确的位置。 所以在开始时比较前两个元素并通过比较来对它们进行排序。 然后选取第三个元素,并在前两个排序元素中找到它的正确位置。 通过这种方式,逐渐将更多元素添加到已排序的列表中,并将它们置于适当的位置。
参考下面代码的实现 -

def insertion_sort(InputList):for i in range(1, len(InputList)):j = i-1nxt_element = InputList[i]
# Compare the current element with next onewhile (InputList[j] > nxt_element) and (j >= 0):InputList[j+1] = InputList[j]j=j-1InputList[j+1] = nxt_elementlist = [19,2,31,45,30,11,121,27]
insertion_sort(list)
print(list)

执行上面示例代码,得到以下结果 -

[2, 11, 19, 27, 30, 31, 45, 121]

希尔排序

希尔排序涉及排序远离其他的元素。对给定列表的大型子列表进行排序,并继续缩小列表的大小,直到所有元素都被排序。 下面的程序通过将其等于列表大小的一半来找到间隙,然后开始对其中的所有元素进行排序。 然后不断重置差距,直到整个列表被排序。

def shellSort(input_list):gap = len(input_list) / 2while gap > 0:for i in range(gap, len(input_list)):temp = input_list[i]j = i
# Sort the sub list for this gapwhile j >= gap and input_list[j - gap] > temp:input_list[j] = input_list[j - gap]j = j-gapinput_list[j] = temp# Reduce the gap for the next elementgap = gap/2list = [19,2,31,45,30,11,121,27]shellSort(list)
print(list)

执行上面示例代码,得到以下结果 -

[2, 11, 19, 27, 30, 31, 45, 121]

选择排序

在选择排序中,首先查找给定列表中的最小值并将其移至排序列表。 然后为未排序列表中的每个剩余元素重复该过程。 输入排序列表的下一个元素将与现有元素进行比较并放置在正确的位置。 所以最后所有来自未排序列表的元素都被排序。参考以下代码实现 -

def selection_sort(input_list):for idx in range(len(input_list)):min_idx = idxfor j in range( idx +1, len(input_list)):if input_list[min_idx] > input_list[j]:min_idx = j
# Swap the minimum value with the compared valueinput_list[idx], input_list[min_idx] = input_list[min_idx], input_list[idx]l = [19,2,31,45,30,11,121,27]
selection_sort(l)
print(l)

执行上面示例代码,得到以下结果 -

[2, 11, 19, 27, 30, 31, 45, 121]

相关文章:

python排序算法

排序是指以特定格式排列数据。 排序算法指定按特定顺序排列数据的方式。 最常见的排序是数字或字典顺序。 排序的重要性在于&#xff0c;如果数据是以分类方式存储&#xff0c;数据搜索可以优化到非常高的水平。 排序也用于以更易读的格式表示数据。 下面来看看python中实现的5…...

【C++入门第二期】引用 和 内联函数 的使用方法及注意事项

前言引用的概念初识引用区分引用和取地址引用与对象的关系引用的特性引用的使用场景传值和引用性能比较引用和指针的区别内联函数内联函数的概念内联函数的特性前言 本文主要学习的是引用 及 内联含函数&#xff0c;其中的引用在实际使用中会异常舒适。 引用的概念 概念&…...

数据结构——顺序表讲解

作者&#xff1a;几冬雪来 时间&#xff1a;2023年2月25日 内容&#xff1a;数据结构顺序表内容讲解 目录 前言&#xff1a; 顺序表&#xff1a; 1.线性表&#xff1a; 2.什么是顺序表&#xff1a; 3.顺序表的概念和构成&#xff1a; 4.顺序表的书写&#xff1a; 1…...

Redis 主从复制-服务器搭建【薪火相传/哨兵模式】

Redis 安装参考文章&#xff1a;Centos7 安装并启动 Redis-6.2.6 注意&#xff1a;本篇文章操作&#xff0c;不能在 静态IP地址 下操作&#xff0c;必须是 动态IP地址&#xff0c;否则最后主从服务器配置不成功&#xff01; 管道符查看所有redis进程&#xff1a;ps -ef|grep re…...

数据库|(五)分组查询

&#xff08;五&#xff09;分组查询1. 介绍2. 语法3. 简单分组函数2. 添加筛选条件3. 添加复杂的筛选条件4. 分组查询特点5. 按表达式或函数分组6. 按多个字段分组7. 分组查询添加排序1. 介绍 引入&#xff1a;查询每个部门的平均工资 -- 以前写法&#xff1a;求的是总平均工…...

Orin安装ssh、vnc教程

文章目录一&#xff1a;ssh远程终端的配置PC的配置MobaXterm的下载二&#xff1a;VNC Viewer远程图形界面终端配置&#xff1a;PC配置&#xff1a;一&#xff1a;ssh远程 终端的配置 1.ifconfig查看终端ip地址 其中的eth是网口&#xff0c;我们需要看的是wlan0下的inet&#…...

Allegro如何快速删除孤立铜皮操作指导

Allegro如何快速删除孤立铜皮操作指导 在做PCB设计的时候,铺铜是常用的设计方式,在PCB设计完成之后,需要删除PCB上孤立的铜皮,即铜皮有网络但是却没有任何连接 如下图 通过Status报表也可以看到Isolated shapes 如何快速地删除孤立铜皮,具体操作如下 点击Shape...

从单管单色到单管RGB,这项MicroLED工艺不可忽视

微显示技术商Porotech&#xff0c;在CES 2023期间展示了最新的MicroLED显示模组。近期&#xff0c;AR/VR光学领域的知名博主Karl Guttag深度分析了该公司的微显示技术&#xff0c;并指出Porotech带来了他见过最有趣的MicroLED技术。Guttag表示&#xff1a;Porotech是本届CES上给…...

6-Java中新建一个文件、目录、路径

文章目录前言1-文件、目录、路径2-在当前路径下创建一个文件3-在当前路径下创建一个文件夹&#xff08;目录&#xff09;3.1 测试1-路径已经存在3.2 测试2-路径不存在3.2 创建不存在的路径并新建文件3.3 删除已存在的文件并新建4-总结前言 学习Java中如何新建文件、目录、路径…...

Bootstrap系列之Flex布局

文章目录Bootstrap中的Flexd-flex与d-inline-flex也存在响应式变化flex水平布局flex垂直布局flex水平与垂直也存在响应式变化内容排列&#xff08;justify-content响应式变化也存在于这里sm&#xff0c;md&#xff0c;lg&#xff0c;xl&#xff09;子元素对齐方式Align items&a…...

匈牙利算法与KM算法的区别

前记 在学习过程中&#xff0c;发现很多博客将匈牙利算法和KM算法混为一谈&#xff0c;当时只管用不管分析区别&#xff0c;所以现在来分析一下两个算法之间的区别。 匈牙利算法在二分图匹配的求解过程中共两个原则&#xff1a; 1.最大匹配数原则 2.先到先得原则 而KM算法求…...

You Only Need 90K Parameters to Adapt Light 论文阅读笔记

这是BMVC2022的论文&#xff0c;提出了一个轻量化的局部全局双支路的低光照图像质量增强网络&#xff0c;有监督。 思路是先用encoder f(⋅)f(\cdot)f(⋅)转到raw-RGB域&#xff0c;再用decoder gt(⋅)g_t(\cdot)gt​(⋅)模拟ISP过程转到sRGB域。虽然文章好像没有明确指出&…...

【vue2小知识】实现axios的二次封装

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;在vue2中实现axios的二次封装 目录 一、平常axios的请求发送方式 二、axios的一次封装…...

走近php的数组:数组的定义与数组函数

数组是一种数据结构&#xff0c;它由一组元素组成&#xff0c;这些元素可以是相同类型或不同类型。数组是在程序运行时动态创建的&#xff0c;可以根据需要增加或删除元素&#xff0c;因此它们是非常灵活和实用的数据结构。在大多数编程语言中&#xff0c;数组都有一个索引&…...

Docker 应用实践-仓库篇

目前 Docker 官方维护了一个公共仓库 Docker Hub&#xff0c;用于查找和与团队共享容器镜像&#xff0c;界上最大的容器镜像存储库&#xff0c;拥有一系列内容源&#xff0c;包括容器社区开发人员、开放源代码项目和独立软件供应商&#xff08;ISV&#xff09;在容器中构建和分…...

python+django篮球NBA周边商城vue

目 录 第一章 绪 论 1 1.1背景及意义 1 1.2国内外研究概况 1 1.3 研究的内容 1 第二章 关键技术的研究 3 2.1 vue技术介绍 3 myproject/ <-- 高级别的文件夹 |-- myproject/ <-- Django项目文件夹 | |-- myproje…...

抽象类与接口的区别

抽象类什么是抽象类&#xff1f;抽象类是特殊的类&#xff0c;只是不能被实例化&#xff1b;除此以外&#xff0c;具有类的其他特性&#xff1b;重要的是抽象类可以包括抽象方法&#xff0c;这是普通类所不能的。抽象方法只能声明于抽象类中&#xff0c;且不包含任何实现&#…...

1904. 你完成的完整对局数

题目&#xff1a; 一款新的在线电子游戏在近期发布&#xff0c;在该电子游戏中&#xff0c;以 刻钟 为周期规划若干时长为 15 分钟 的游戏对局。这意味着&#xff0c;在 HH:00、HH:15、HH:30 和 HH:45 &#xff0c;将会开始一个新的对局&#xff0c;其中 HH 用一个从 00 到 23…...

Vue3:自定义指令以及简单的后台管理权限封装

目录 前言&#xff1a; 自定义指令介绍&#xff1a; 局部的自定义指令&#xff1a; 全局自定义指令&#xff1a; 讲讲后台管理权限管理&#xff1a; 前言&#xff1a; 说起这个自定义指令的使用场景&#xff0c;我第一反应就是&#xff0c;后台管理的权限管理&#xff0c;要…...

剑指 Offer 12. 矩阵中的路径

摘要 剑指 Offer 12. 矩阵中的路径 一、回溯算法解析 本问题是典型的矩阵搜索问题&#xff0c;可使用 深度优先搜索&#xff08;DFS&#xff09; 剪枝解决。 深度优先搜索&#xff1a; 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归&#xff0c;先朝一个方向搜…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...