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

Python选择排序和冒泡排序算法

选择排序和冒泡排序都是常见的排序算法。以下是这两种算法的Python实现:

  1. 选择排序(Selection Sort)

选择排序的基本思想是在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

Python实现如下:

  1. def selection_sort(arr):
  2.     for i in range(len(arr)):
  3.         # 找到当前未排序部分中的最小值
  4.         min_index = i
  5.         for j in range(i+1, len(arr)):
  6.             if arr[j] < arr[min_index]:
  7.                 min_index = j
  8.         # 将找到的最小值与当前i位置的值交换
  9.         arr[i], arr[min_index] = arr[min_index], arr[i]
  10.     return arr
  1. 冒泡排序(Bubble Sort)

冒泡排序的基本思想是,通过比较相邻的两个元素,如果前一个比后一个大,则交换它们的位置。这样对数组进行多次遍历,每一次遍历都把一个未排序的元素放置到了已排序的末尾,也就是逐渐"冒泡"到正确的位置。

Python实现如下:

  1. def bubble_sort(arr):
  2.     n = len(arr)
  3.     for i in range(n):
  4.         # 最后i个元素已经有序,无需比较
  5.         for j in range(0, n-i-1):
  6.             if arr[j] > arr[j+1]:
  7.                 arr[j], arr[j+1] = arr[j+1], arr[j]  # 交换位置
  8.     return arr

这两种算法的时间复杂度都是O(n^2),其中n是列表的长度。这意味着,对于非常大的数据集,这些算法可能不是最高效的。有其他一些更高效的排序算法,例如快速排序、归并排序和堆排序等。

  1. 快速排序(Quick Sort)

快速排序是一种分治的排序算法。它将一个大的数组分成两个子数组,将两部分独立地排序。快速排序的核心思想是选择一个"基准"元素,通过一趟排序将待排序列分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素要小,然后再按此方法对这两部分继续进行排序,以达到整个序列有序。

Python实现如下:

  1. def quick_sort(arr):
  2.     if len(arr) <= 1:
  3.         return arr
  4.     pivot = arr[len(arr) // 2]
  5.     left = [x for x in arr if x < pivot]
  6.     middle = [x for x in arr if x == pivot]
  7.     right = [x for x in arr if x > pivot]
  8.     return quick_sort(left) + middle + quick_sort(right)
  1. 归并排序(Merge Sort)

归并排序是另一种分治的排序算法。它将待排序的序列划分为若干个子序列,每个子序列是一个有序的序列。然后再将所有子序列合并成一个有序的序列。这个过程是递归的,每一层的归并做为一次"归并操作"。

Python实现如下:

  1. def merge_sort(arr):
  2.     if len(arr) <= 1:
  3.         return arr
  4.     mid = len(arr) // 2
  5.     left = merge_sort(arr[:mid])
  6.     right = merge_sort(arr[mid:])
  7.     return merge(left, right)
  8. def merge(left, right):
  9.     result = []
  10.     i = j = 0
  11.     while i < len(left) and j < len(right):
  12.         if left[i] <= right[j]:
  13.             result.append(left[i])
  14.             i += 1
  15.         else:
  16.             result.append(right[j])
  17.             j += 1
  18.     result += left[i:]
  19.     result += right[j:]
  20.     return result

相关文章:

Python选择排序和冒泡排序算法

选择排序和冒泡排序都是常见的排序算法。以下是这两种算法的Python实现&#xff1a; 选择排序&#xff08;Selection Sort&#xff09; 选择排序的基本思想是在未排序的序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然…...

集合的自反关系和对称关系

集合的自反关系和对称关系 一&#xff1a;集合的自反关系1&#xff1a;原理&#xff1a;2&#xff1a;代码实现 二&#xff1a;对称关系1&#xff1a;原理&#xff1a;2&#xff1a;代码实现 三&#xff1a;总结 一&#xff1a;集合的自反关系 1&#xff1a;原理&#xff1a; …...

传递函数的推导和理解

传递函数的推导和理解 假设有一个线性系统&#xff0c;在一般情况下&#xff0c;它的激励 x ( t ) x(t) x(t)与响应 y ( t ) y(t) y(t)所满足的的关系&#xff0c;可用下列微分方程来表示&#xff1a; a n y ( n ) a n − 1 y ( n − 1 ) a n − 2 y ( n − 2 ) ⋯ a 1 y…...

STM32 SPI

SPI介绍 SPI是Serial Pepheral interface缩写&#xff0c;串行外围设备接口。 SPI接口是一种高速的全双工同步通信总线&#xff0c;已经广泛应用在众多MCU、存储芯片、AD转换器和LCD之间。大部分STM32有3个SPI接口&#xff0c;本实验使用的是SPI1。 SPI同一时刻既能发送数据&…...

Linux系统编程 day02 vim、gcc、库的制作与使用

Linux系统编程 day02 vim、gcc、库的制作与使用 01. vim0101. 命令模式下的操作0102. 切换到文本输入模式0103. 末行模式下的操作0104. vim的配置文件 02. gcc03. 库的制作与使用0301. 静态库的制作与使用0302. 动态库(共享库)的制作与使用 01. vim vim是一个编辑器&#xff0…...

Mistral 7B 比Llama 2更好的开源大模型 (四)

Mistral 7B在平衡高性能和保持大型语言模型高效的目标方面迈出了重要的一步。通过我们的工作,我们的目标是帮助社区创建更实惠、更高效、更高性能的语言模型,这些模型可以在广泛的现实世界应用程序中使用。 Mistral 7B在实践中,对于16K和W=4096的序列长度,对FlashAttentio…...

相似基因序列问题 ——查找

【题目背景】 生物的遗传物质存在个体间或种群水平的差异&#xff0c;这样的差异被称为遗传变异。突变及基因重组等因素都会导致遗传变异。尽管亲代在将其遗传信息传递给子代时会发生遗传变异&#xff0c;但是这些遗传变异仅占遗传物质的一小部分&#xff0c;通常亲代和子代之…...

【汇编】“转移”综述、操作符offset、jmp指令

文章目录 前言一、转移综述1.1 :背景&#xff1a;1.2 转移指令1.3 转移指令的分类按转移行为根据指令对IP修改的范围不同 二、操作符offset2.1 offset操作符是干什么的&#xff1f;标号是什么&#xff1f; 2.2 nop是什么&#xff1f; 三、jmp指令3.1 jmp指令的功能3.2 jmp指令&…...

Java格式化类Format

文章目录 Format介绍Format方法- format&#xff08;格式化&#xff09;- parseObject&#xff08;解析&#xff09; 格式化分类日期时间格式化1. DateFormat常用方法getInstancegetDateInstancegetTimeInstancegetDateTimeInstance 方法入参styleLocale 2. SimpleDateFormat常…...

力扣每日一题-美化数组的最少删除数-2023.11.21

力扣每日一题&#xff1a;美化数组的最少删除数 开篇 今天的力扣每日一题居然写出来了&#xff0c;好开心&#xff0c;迫不及待地把题目分享出来&#xff0c;希望你也能把它狠狠拿下。 题目链接: 2216.美化数组的最少删除数 题目描述 代码思路 创建一个list集合来保存数组&a…...

【练习】检测U盘并自动复制内容到电脑的软件

软件作用&#xff1a; 有U盘插在电脑上后&#xff0c;程序会检测到U盘的路径。 自己可以提前设置一个保存复制文件的路径或者使用为默认保存的复制路径&#xff08;默认为桌面&#xff0c;可自行修改&#xff09;。 检测到U盘后程序就会把U盘的文件复制到电脑对应的…...

【计算机毕业设计】Springboot高校论文管理系统 -96280,免费送源码,【开题选题+程序定制+论文书写+答辩ppt书写-原创定制程序】

SpringBoot论文管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;高校当然也不例外。论文管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方…...

nginx 代理接口报404 问题排查

今天遇到一个nginx代理后端接口请求报404的问题&#xff0c;问题是这样的&#xff0c;后端由于服务器没有环境&#xff0c;但是需要和前端联调&#xff0c;于是采用cpolar内网穿透的方式&#xff0c;穿出来了。但是前端请求跨域&#xff0c;于是前端用nginx代理了一下后端接口&…...

JVM 调优指南

文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器&#xff1f;3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例 JVM调优指南 -- 楼兰 ​ JV…...

澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享

猫罐头要符合三点&#xff1a;营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点&#xff0c;才是品质上乘的猫罐头。 猫罐头的三个要素&#xff0c;一个都不能少。配方不均衡&#xff0c;营养就不足&#xff1b;原料不新鲜&#xff0c;生产出来的猫罐头就…...

CISP练习测试题

免责声明 文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!!! 某公司准备在业务环境中部署一种新的计算机产品,下列哪一项…...

2023下半年软件设计师考试知识点大全思维导图

软件设计师考试知识点大全思维导图 2023年下半年第一次机考 复习资料 以上是我在学习过程中根据自己的知识结构的特点及刷到的考题 做的导图&#xff0c;有需要的可以留言发原版的 mmap格式文件 方便自己拓展. 软考资料 这是网上找的资料 汇总免费放在这里 吧![ 链接&#x…...

[C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…...

Android Binder 跨进程通信的优势是什么

Android Binder 跨进程通信的优势是什么 Android Binder 是 Android 系统中用于实现跨进程通信的底层机制&#xff0c;具有以下优势&#xff1a; 高效性&#xff1a;Android Binder 使用共享内存技术&#xff0c;在进程间传递数据时不需要进行数据拷贝&#xff0c;从而提高了传…...

HashMap的详细解读

HashMap是Java语言中的一个重要数据结构&#xff0c;它实现了Map接口&#xff0c;允许我们存储键值对&#xff0c;并且可以根据键直接访问对应的值。 特性 键值对存储&#xff1a;HashMap存储的是键值对数据&#xff0c;可以方便的通过键来获取值。无序&#xff1a;HashMap中…...

【大模型缓存优化终极指南】:SITS大会首发3大工业级缓存策略+实测QPS提升270%的落地代码

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;大模型缓存策略优化&#xff1a;SITS大会 缓存瓶颈与SITS大会共识 在2024年上海智能技术峰会&#xff08;SITS&#xff09;上&#xff0c;来自Meta、阿里达摩院与清华智谱的联合工作组首次公开了大语言…...

BooruDatasetTagManager:终极图像标签管理工具,10倍提升AI训练数据预处理效率

BooruDatasetTagManager&#xff1a;终极图像标签管理工具&#xff0c;10倍提升AI训练数据预处理效率 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 还在为数千张训练图像的繁琐标注工作而烦恼吗&…...

【硬件实战】串口通信排障指南:从RS-232到RS-422的链路诊断与修复

1. 串口通信故障排查的起点&#xff1a;物理层检查 当你面对一台死活不通信的设备时&#xff0c;先别急着怀疑人生。我经历过太多次这种场景&#xff1a;项目deadline就在眼前&#xff0c;现场客户盯着你调试&#xff0c;结果串口死活不出数据。这时候最忌讳的就是一上来就改波…...

终极Notero使用指南:如何快速实现Zotero与Notion文献同步

终极Notero使用指南&#xff1a;如何快速实现Zotero与Notion文献同步 【免费下载链接】notero A Zotero plugin for syncing items and notes into Notion 项目地址: https://gitcode.com/gh_mirrors/no/notero 在学术研究和工作流管理中&#xff0c;我们常常面临一个共…...

别再只记RTSP地址了!一份超全的安防摄像头(海康/大华/宇视等)OpenCV连接配置清单与排错手册

安防摄像头RTSP连接全指南&#xff1a;从协议解析到OpenCV实战优化 1. 理解RTSP协议与安防摄像头集成基础 RTSP&#xff08;Real Time Streaming Protocol&#xff09;作为安防摄像头视频流传输的核心协议&#xff0c;其连接稳定性直接决定了后续图像处理的效果。与HTTP协议不同…...

视频加速控制器:如何用2倍速度看完一天的学习内容

视频加速控制器&#xff1a;如何用2倍速度看完一天的学习内容 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 还在为视频播放速度太慢而烦恼吗&#xff1f;每天面对海量的在线…...

拆解一个经典课程设计:双工对讲机电路中,扬声器如何兼作话筒?电桥与运放是关键

双工对讲机设计精要&#xff1a;扬声器如何实现声电双向转换的奥秘 在模拟电路设计中&#xff0c;双工对讲机一直是一个令人着迷的经典案例。它巧妙地利用扬声器同时作为话筒和喇叭&#xff0c;实现了双向通话且互不干扰的功能。这种设计不仅节省了元件成本&#xff0c;更体现了…...

AI接口语义漂移预警机制:奇点大会强制要求的3项Schema自治协议(含OpenAPI 3.1.2扩展草案)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生API设计规范&#xff1a;2026奇点智能技术大会接口设计最佳实践 AI原生API不再是对传统RESTful接口的简单增强&#xff0c;而是以模型能力为中心、语义驱动、具备自解释与自适应特性的新型接口范…...

告别 Claude Code 封号烦恼使用 Taotoken 稳定接入编程助手

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 告别 Claude Code 封号烦恼使用 Taotoken 稳定接入编程助手 对于依赖 Claude Code 进行编程辅助的开发者而言&#xff0c;服务中断…...

TikTokCommentScraper:创新智能的抖音评论自动化采集解决方案,让数据驱动决策变得简单

TikTokCommentScraper&#xff1a;创新智能的抖音评论自动化采集解决方案&#xff0c;让数据驱动决策变得简单 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper TikTokCommentScraper 是一款创新的抖音评论数…...