算法复习——6种排序方法的简单回顾

算法复习——6种排序方法的简单回顾

常见排序方法:冒泡排序、选择排序、插入排序、堆排序、归并排序、快速排序的简单回顾

冒泡排序

重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”

在这里插入图片描述

在冒泡排序中,第 1 轮需要比较 n - 1 次,第 2 轮需要比较 n - 2 次…第 n - 1 轮需要比较 1 次。因此,总的比较次数为 (n - 1) + (n - 2) + … + 1≈n2/2。

时间复杂度:O(n²)

选择排序

重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”

在这里插入图片描述

使用线性查找在数据中寻找最小值,找到最小值1。(详见下一篇文章:数组的查找:线性查找,二分查找)

与最左端数字6交换,即可完成此次操作。

在余下的数字中寻找最小值,重复以上操作:

在这里插入图片描述

比较次数:(n - 1) + (n - 2) + … + 1≈n2/2 次

时间复杂度:O(n²)

插入排序

从序列左端开始依次对数据进行排序。插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上。

在这里插入图片描述

首先先排好5在第一个位置。从待排数字(未排序区域)中取出最左边的数字 3,将它与左边已归位的数字进行比较。若左边的数字更大,就交换这两个数字。重复该操作,直到左边已归位的数字比取出的数字更小,或者取出的数字已经被移到整个序列的最左边为止。

时间复杂度:O(n²)

堆排序

利用了数据结构中的堆。关于堆的介绍可以见上一章:数据结构复习-CSDN博客

在这里插入图片描述

首先,在堆中存储所有的数据,并按降序来构建堆。

在这里插入图片描述

取出第一个数字后,重新构造堆。

重复上述操作直到堆变空为止。

在这里插入图片描述

时间复杂度:O(nlogn)

虽然运行时间短,但数据结构相对复杂,实现起来相对困难。

归并排序

把序列分成长度相同的两个子序列,当无法继续往下分时(也就是每个子 序列中只有一个数据时),就对子序列进行归并。

归并:把两个排好序的子序列合并成一个有序序列。

在这里插入图片描述

在这里插入图片描述

将序列逐次分割。分割完毕后,按从小到大顺序合并。

在这里插入图片描述

合并这种含有多个数字的子序列时,要先比较首位数字,再移动较小的数字。

在这里插入图片描述

归并排序中,分割序列所花费的时间不算在运行时间内(可以当作序列本来就是分割好的)

无论哪一行都是n个数据,所以每行的运行时间都为 O(n)。而将长度为 n 的序列对半分割直到只有一个数据为止时,可以分成 log2n 行。

时间复杂度:O(nlogn)

快速排序

首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。

[ 比基准值小的数 ] 基准值 [ 比基准值大的数 ]

接着,对两个“[ ]”中的数据进行排序之后,整体的排序便完成了。对“[ ]”里面的数据进行排序时同样也会使用快速排序。

在这里插入图片描述

举例:随机取4为基准值。将其他数字和基准值进行比较。小于基准值的往左移,大于基准值的往右移。

在这里插入图片描述

完成后,再分别对左边和右边的数据进行快速排序,就能完成整体的排序。

快速排序是一种**“分治法”**。它将原本的问题分成两个子问题(比基准值小的数和比基准值大的数),然后再分别解决这两个问题。

像这样,在算法内部继续使用该算法的现象被称为**“递归”**。

时间复杂度:O(nlogn)(如果数据中的每个数字被选为基准值的概率都相等,平均运行时间)

参考资料:我的第一本算法书 (石田保辉 宮崎修一)

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

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

相关文章

2024黑龙江省职业院校技能大赛信息安全管理与评估样题第二三阶段

2024黑龙江省职业院校技能大赛暨国赛选拔赛 "信息安全管理与评估"样题 *第二阶段竞赛项目试题* 本文件为信息安全管理与评估项目竞赛-第二阶段试题,第二阶段内容包括:网络安全事件响应、数字取证调查和应用程序安全。 极安云科专注技能竞赛…

火狐,要完了!

在过去几年中,关于Firefox 浏览器的衰落有过不少讨论。目前来说,很多公共的以及私营的大型网站都缺乏对Firefox的适当支持。但是Firefox也多次试图“自救”,甚至就在不久前,Mozilla 通过官博发文,表示 Firefox 在 2023…

Milvus 再上新!支持 Upsert、Kafka Connector、集成 Airbyte,助力高效数据流处理

Milvus 已支持 Upsert、 Kafka Connector、Airbyte! 在上周的文章中《登陆 Azure、发布新版本……Zilliz 昨夜今晨发生了什么?》,我们已经透露过 Milvus(Zilliz Cloud)为提高数据流处理效率, 先后支持了 Up…

ardupilot开发 --- git 篇

一些概念 工作区:就是你在电脑里能看到的目录;暂存区:stage区 或 index区。存放在 :工作区 / .git / index 文件中;版本库:本地仓库,存放在 :工作区 / .git 中 关于 HEAD 是所有本地…

超详细介绍Ubuntu系统安装CUDA和cuDNN【一站式服务!!!】

文章目录 简介1.安装显卡驱动查看显卡型号下载并安装NVIDIA驱动使用Ubuntu自带的软件和更新(Software&Updates)工具安装【博主使用的这种方式,推荐】自行下载使用命令行安装【自由度更高,大佬自行尝试】 2.下载并安装CUDA3.下…

Linux下Redis安装及配置

首先下载redis安装包:地址 这里我使用的是7.0版本的! 将文件上传至linux上,此处不再多叙述,不会操作的,建议使用ftp! 第一步:解压压缩包 tar -zxvf redis-7.0.14.tar.gz第二步:移…

前端-杂记

1 子域请求时候会默认带上父域下的Coolkie 2 document.cookie 设置cookie只能设置当前域和父域,且path只能是当前页或者/ 比如当前页面地址为 http://localhost:3000/about 我们设置 document.cookie "demo11"; 设置 document.cookie "demo22; …

jetbrains卡顿(Pycharm等全家桶)终极解决方案,肯定解决!非常肯定!

话越短,越有用,一共四种方案,肯定能解决!!!非常肯定!! 不管你是什么原因卡顿:有多行注释的代码文件滚动卡、新版本卡、各种滚动卡、字号大也卡、键入代码卡,各…

四十一、高可用

一、定义 TC(Tencent Cloud)的异地多机房容灾架构是指,在不同的地理位置上配置多个数据中心,以确保系统的高可用性和容灾能力。当某个数据中心发生故障或者不可用时,可以自动切换到其他数据中心来提供服务,…

ATFX汇市:11月非农就业报告来袭,美指提前高位回落

ATFX汇市:今日21:30,美国劳工部劳动统计局将公布美国11月非农就业报告,其中两项数据需重点关注。其一,11月季调后非农就业人口,前值为增加15万人,预期值增加17.5万人。由于10月份的非农数据出现爆冷&#x…

分布式系统中最基础的 CAP 理论及其应用

对于开发或设计分布式系统的架构师、工程师来说,CAP 是必须要掌握的基础理论,CAP 理论可以帮助架构师对系统设计中目标进行取舍,合理地规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展&a…

Python文件操作(txt + xls + json)

文章目录 简介1、使用with_open读取和保存:.txt .bin(二进制文本)1.1、with open语句详解1.1、项目实战 2、使用pandas读取和保存:.xls .xlsx2.1、pandas简介2.2、环境配置2.3、项目实战 3、 使用json.dump读取和保存&#xff1…

2023 金砖国家职业技能大赛网络安全省赛理论题样题(金砖国家未来技能挑战赛)

2023 金砖国家职业技能大赛网络安全省赛理论题样题(金砖国家未来技能挑战赛) 一、参加比赛的形式 团队参与,每队2名选手(设队长1名)。 二、项目项目阶段简介 项目由四个阶段组成,将按顺序完成。向参与者…

基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)

一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,确…

聊聊模糊测试,以及几种模糊测试工具的介绍!

以下为作者观点: 在当今的数字环境中,漏洞成为攻击者利用系统漏洞的通道,对网络安全构成重大威胁。这些漏洞可能存在于硬件、软件、协议实施或系统安全策略中,允许未经授权的访问并破坏系统的完整性。 根据 "常见漏洞与暴露…

【计算机网络】应用层电子邮件协议

一、电子邮件系统架构 电子邮件是一个典型的异步通信系统,发送方从UA,也就是邮件客户端,通过应用层SMTP协议,传输层tcp协议,发送给发送方的邮件服务器,比如使用的是163邮箱,163提供的SMTP服务器…

C //例10.3 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。

C程序设计 (第四版) 谭浩强 例10.3 例10.3 从键盘读入若干个字符串,对它们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差异。 代码块 方法…

苹果Vision Pro即将量产

据界面新闻消息,苹果公司将在今年12月正式量产第一代MR(混合现实)产品Vision Pro。苹果公司对Vision Pro寄予了厚望,预计首批备货40万台左右,2024年的销量目标是100万台,第三年达到1000万台。 苹果的供应…

Vue极致性能优,史上最全指南!!!(持续更新)

关于Vue性能优化这个话题感觉大家一定都不陌生,不管做没做过,肯定是多少听说过的,面试的时候也没被少问 每次面试被问到性能优化,肯定只会照着面试题上的答案背一遍,并且心里默念,别再往下问啦&#xff0c…

mediapipe+opencv实现保存图像中的人脸,抹去其他信息

mediapipeopencv MediaPipe本身不提供图像处理功能,它主要用于检测和跟踪人脸、手势、姿势等。如果您想要从图像中仅提取人脸主要信息并去除其他信息. # codingutf-8 """project: teatAuthor:念卿 刘file: test.pydate&…