实现一个简单的排序算法(如冒泡排序或快速排序)

实现一个简单的排序算法(如冒泡排序或快速排序)

实现简单的排序算法:冒泡排序与快速排序

一、冒泡排序算法的实现与分析

冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

以下是冒泡排序的Python实现:

 

python复制代码

def bubble_sort(arr):
n = len(arr)
# 遍历所有数组元素
for i in range(n):
# 最后i个元素已经到位,无需再比较
for j in range(0, n - i - 1):
# 如果当前元素大于下一个元素,则交换它们
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# 测试冒泡排序函数
arr = [64, 34, 25, 12, 22, 11, 90]
print("排序前的数组:", arr)
sorted_arr = bubble_sort(arr)
print("排序后的数组:", sorted_arr)

这段代码首先定义了一个名为bubble_sort的函数,它接受一个列表arr作为输入,并返回排序后的列表。函数内部使用两个嵌套的for循环来实现冒泡排序。外层循环控制所有的遍历次数,内层循环则负责每次遍历过程中的元素比较和交换。

冒泡排序的时间复杂度为O(n^2),其中n是列表的长度。这是因为对于包含n个元素的列表,最坏情况下需要进行n-1次遍历,每次遍历都需要比较n-i-1个元素(i为当前遍历次数)。因此,冒泡排序在处理大规模数据时效率较低。然而,由于其实现简单,对于小规模数据或特定场景下的排序任务,冒泡排序仍然具有一定的实用价值。

二、快速排序算法的实现与分析

快速排序是一种高效的排序算法,它采用分治法的思想,将一个待排序的列表划分为若干个子列表,然后对每个子列表进行递归排序,最后将排序后的子列表合并成一个有序的列表。

以下是快速排序的Python实现:

 

python复制代码

def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 测试快速排序函数
arr = [10, 7, 8, 9, 1, 5]
print("排序前的数组:", arr)
sorted_arr = quick_sort(arr)
print("排序后的数组:", sorted_arr)

在这段代码中,quick_sort函数首先检查输入列表的长度,如果长度小于等于1,则直接返回列表本身(因为单个元素或空列表已经是有序的)。然后,函数选择一个基准值(这里选择列表中间的元素),并将列表划分为三个子列表:小于基准值的元素、等于基准值的元素和大于基准值的元素。最后,函数递归地对小于基准值和大于基准值的子列表进行排序,并将排序后的子列表与等于基准值的子列表合并起来,得到最终的排序结果。

快速排序的时间复杂度在最坏情况下为O(n^2),但在平均情况下为O(n log n),其中n是列表的长度。快速排序的性能取决于基准值的选择和输入数据的特性。在实际应用中,通常通过随机选择基准值或使用三数取中等策略来优化快速排序的性能。

快速排序具有高效、稳定、空间复杂度低等优点,因此在处理大规模数据时通常比冒泡排序等简单排序算法具有更高的效率。然而,快速排序是一种递归算法,因此在处理深度较大的递归调用时可能会导致栈溢出的问题。为了避免这种情况,可以使用迭代法或尾递归优化等技术来改进快速排序的实现。

总结:

冒泡排序和快速排序是两种常见的排序算法,它们各自具有不同的特点和适用场景。冒泡排序实现简单,但效率较低,适用于小规模数据或特定场景下的排序任务。快速排序则具有高效、稳定等优点,在处理大规模数据时通常具有更高的效率。然而,快速排序的实现相对复杂,且需要注意避免栈溢出等问题。在实际应用中,我们可以根据数据的特性和需求来选择合适的排序算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)

CountDownLatch 倒计时锁存器 用来解决线程执行次序的问题 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞。 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞)&#xff0c; 当计数器的值变为…

Android 使用SQLite保存数据

Android 使用SQLite保存数据 简介定义架构和协定使用 SQL 创建数据库将信息添加到数据库insert()函数介绍 从数据库中读取信息query()函数介绍 从数据库中删除信息delete()函数介绍 更新数据库update()函数介绍 保留数据库连接调试数据库 简介 对于重复数据或结构化数据&#…

云服务器8核32G配置租用优惠价格94元/月、1362元一年

8核32G云服务器京东云轻量云主机价格94元1个月、282元3个月、673元6个月、1362元一年&#xff0c;配置8C32G-100G SSD系统盘-10M带宽-2000G月流量 华北-北京&#xff0c;京东云优惠活动 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 8核32G云服务器京东云轻量云主机价…

数据挖掘篇【 alias方法 和 隐式转换 】

目录 介绍 隐式转换 alias方法 介绍 在 Apache Spark 中&#xff0c;.alias 是一个方法&#xff0c;用于给 DataFrame 的列或表达式指定一个新的别名。当你需要对列进行重命名或者在 SQL 表达式中使用更易读的名称时&#xff0c;这个方法非常有用。 .alias 方法通常与 Dat…

CSS(三)---【盒子模型、边框、外边距合并】

零.前言 本篇主要介绍CSS中最重要的一种概念模型&#xff1a;“盒子模型”。 关于CSS的更多内容&#xff0c;可以查看作者之前的文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属性使用】-CSDN博客 一.盒子模…

WebCopilot:一款功能强大的子域名枚举和安全漏洞扫描工具

关于WebCopilot WebCopilot是一款功能强大的子域名枚举和安全漏洞扫描工具&#xff0c;该工具能够枚举目标域名下的子域名&#xff0c;并使用不同的开源工具检测目标存在的安全漏洞。 工具运行机制 WebCopilot首先会使用assetsfinder、submaster、subfinder、accumt、finddom…

Springboot 后端文件下载:记一次根据地址连接下载文件并且返回给前端(避免跨域问题)

目的&#xff1a;为了解决前端直接根据文件连接地址下载导致的跨域问题&#xff1b;后端提供一个接口&#xff0c;根据前端传入的文件地址链接下载文件到本地再返回文件流给前端&#xff0c;从而避免跨域问题&#xff08;代码已上线&#xff09; controller层代码&#xff1a;…

Jamba:AI21 实验室发布首个应用级的 Mamba 架构 AI 模型

AI21 实验室发布了 Jamba&#xff0c;这是全球首个基于 Mamba 架构的、可用于实际应用的 AI 模型。目前大多数模型&#xff08;例如 GPT、Gemini 和 Llama&#xff09;都基于 Transformer 架构。Jamba 结合了 Mamba 结构化状态空间模型 (SSM) 和传统 Transformer 架构的优点&am…

属性选择器

1.[title]{background:yellow;}&#xff1a;所有带title标签设置成黄色 2.div[class]{background:yellow;}&#xff1a;所有div中带class标签设置成黄色 3.div[classbox1]{border:1px solid blue; }&#xff1a;div中包含class并且classbox1的设置成蓝边框 4. class…

Postman Tests设置Global读取不是最新值,跟Tests执行顺序有关(踩坑笔记)

前言 在执行Run Collection的时候&#xff0c;发现设置的全局变量每次读取都是旧值&#xff0c;没有读取到最新的值。 背景 有2个地方需要动态参数&#xff0c;一个URL&#xff0c;一个Body&#xff0c;因此需要设置Tests脚本。 url动态参数 url&#xff1a;动态参数projec…

【Java】打包:JAR、EAR、WAR

打包&#xff1a;JAR、EAR、WAR war 是一个 Web 模块&#xff0c;其中需要包括 WEB-INF&#xff0c;是可以直接运行的 WEB 模块。而 jar 一般只是包括一些 class 文件&#xff0c;在声明了 main_class 之后是可以用 java 命令运行的。 它们都是压缩的包&#xff0c;拿 Tomcat …

《Linux 源码趣读》的读书笔记-第1部分

事情起源 工作快7年了,由于我不断地完成各种奇怪的功能,我终于能看懂计算机组成和操作系统了。 当我终于看一个东西不再是天书了,那一刻,我是上头的。 于是我简单刷了几个视频:《王道-计算机组成原理》、《王道-操作系统》、《王道-计算机网络》。 刷完我总觉得哪里不…

【基于springboot分析Quartz(v2.3.2)的启动流程】

基于springboot分析Quartz&#xff08;v2.3.2&#xff09;的启动流程 最近公司的定时任务使用了Quartz框架&#xff0c;在开发中经常出现定任务不执行了的问题&#xff0c;但是我又找不到原因所在&#xff0c;可把我愁坏了。于是我决定看看Quartz框架是怎么调度任务的。&#x…

C# wpf 实现底部嵌入HwndHost

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 第四章 底部嵌入HwndHost&#xff08;本章&#xff09; 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现&#xff1f;1、底部创建窗口&#xff08;1&#xff09;、创建透明窗口&…

FebHost:什么是哈萨克斯坦.KZ域名?

哈萨克斯坦&#xff0c;作为中亚地区重要的一员,其国家域名”.kz”正成为这个独立国家在网络世界中的代表。作为一个经济快速发展的国家,哈萨克斯坦的互联网基础设施和网络应用也在蓬勃发展。而.kz域名正是哈萨克斯坦网络身份的重要体现。 作为注册和管理.kz域名的主要机构,哈…

2020年30米二级分类北京市土地利用数据

引言 北京市省土地利用数据产品是指基于Landsat TM/ETM/OLI遥感影像&#xff0c;采用遥感信息提取方法&#xff0c;并结合野外实测&#xff0c;以及参照国内外现有的土地利用/土地覆盖分类体系&#xff0c;经过波段选择及融合&#xff0c;图像几何校正及配准并对图像进行增强处…

Elasticsearch 开放 inference API 增加了对 Cohere Embeddings 的支持

作者&#xff1a;来自 Elastic Serena Chou, Jonathan Buttner, Dave Kyle 我们很高兴地宣布 Elasticsearch 现在支持 Cohere 嵌入&#xff01; 发布此功能是与 Cohere 团队合作的一次伟大旅程&#xff0c;未来还会有更多合作。 Cohere 是生成式 AI 领域令人兴奋的创新者&…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

蓝桥杯嵌入式老竞赛板在MDK5上使用CooCox下载出现unknown device的问题

本文是在参考网上博客并经过实操解决自己遇到的问题总结而成&#xff0c;只是为了让后来者少走弯路。 本文是在在LED闪烁实验时遇到这个问题 蓝桥杯嵌入式老竞赛板在MDK5上使用CooCox下载出现unknown device的问题 环境&#xff1a;win11系统&#xff0c;keil MDK 518 老竞赛…

【Unity】TextMeshPro富文本

启用富文本 在Unity里&#xff0c;如果需要使用富文本&#xff0c;首先需要开启Rich Text 如果不开启Rich Text&#xff0c;就会在UI上显示富文本代码 1.粗体 <b>Game</b> Over2.斜体 <i>Game</i> Over3.下划线 <u>Game</u> Over4…