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

news2024/11/16 12:43:30

算法复习——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.coloradmin.cn/o/1310202.html

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

相关文章

整理b站黑马程序员C++课程中对于计算机视觉学习有所帮助的知识点。(重点用*标出)

文章目录 1、注释2、变量3、常量4、标识符5、整型 浮点型 字符型 字符串 布尔6、输入 输出7、逻辑运算法8、 程序流程结构9、三目运算符10、switch语句11、循环语句12、跳转语句13、*数组13.1一维数组名 14、二维数组15、**函数15.1、函数的调用15.2、函数的声明15.3、函数份文…

Android camera的metadata

一、实现 先看一下metadata内部是什么样子: 可以看出,metadata 内部是一块连续的内存空间。 其内存分布大致可概括为: 区域一 :存 camera_metadata_t 结构体定义,占用内存 96 Byte 区域二 :保留区&#x…

HarmonyOS--基础组件TextInput

TextInput 官方文档 TextInput组件https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-basic-components-textinput-0000001427584864-V3#ZH-CN_TOPIC_0000001523968610__%E5%AD%90%E7%BB%84%E4%BB%B6 文本输入框组件 接口 TextInput(value?:…

【Python】用Python发邮件

准备工作 以新浪邮箱为例,进入账号管理,打开授权码并保存下来 用到的包 import smtplib from email.header import Header from email.mime.text import MIMEText 账号授权码准备 这里用的是前面记录的授权码,不是登录密码哦 email_hostsm…

40G AOC线缆全系列产品知识详解

40G AOC(Active Optical Cable)线缆作为高速数据传输的重要组成部分,在现代通信和数据中心应用中扮演着重要角色。本期文章我们将从其基本原理、应用领域、优势特点等方面对ETU-LINK 40G AOC全系列产品进行解析。 一、40G AOC全系列产品解析…

Facebook广告投放常见错误

在进行Facebook广告投放时,很容易犯一些常见的错误。这些错误可能导致广告投资的浪费,影响广告效果并降低回报。本文小编讲一些常见的Facebook广告投放错误,以及如何避免它们。 1、不明确目标受众 广告的成功与否很大程度上取决于你选择的目…

基于Java+Swing+mysql学生选课成绩信息管理系统

基于JavaSwingmysql学生选课成绩信息管理系统 一、系统介绍二、功能展示三、项目相关3.1 乱码问题3.2 如何将GBK编码系统修改为UTF-8编码的系统? 四、其它1.其他系统实现 五、源码下载 一、系统介绍 学生教师信息管理、年级班级信息管理、课程信息管理、选课、成绩…

怎么制作一个微信小程序商城

随着移动互联网的普及,越来越多的商家开始关注线上销售。微信小程序商城作为一种便捷、实用的线上销售平台,受到了广大商家的青睐。本文将详细介绍如何制作一个微信小程序商城。 一、登录乔拓云平台进入后台 首先,我们需要登录乔拓云平台&am…

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的相关概念

AntDB-M在架构上分为两层,服务层和存储引擎层。元数据的并发管理集中在服务层,数据的存储访问在存储引擎层。为了保证DDL操作与DML操作之间的一致性,引入了元数据锁(MDL)。 AntDB-M提供了丰富的元数据锁功能&#xff…

服务器感染了.DevicData-D-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

引言: 勒索病毒成为网络安全的严峻挑战,而最新的.DevicData-D-XXXXXXXX勒索病毒更是引起广泛关注。本文将深入介绍.DevicData-D-XXXXXXXX勒索病毒的特征,提供恢复被其加密的数据文件的方法,并分享预防措施,以确保您的数…

【算法题】打印任务排序(js)

输入: 1,2,2 输出:2,0,1 说明:队列头部任务的优先级为1,被移到队列尾部;接着顺序打印两个优先级为2的任务,故其序号分别为0和1;最后打印剩下的优先级为1的任务,其序号为2 解法: const str &q…

_pickle.PicklingError: Can‘t pickle : import of module failed

有问题 没问题的 python - pickle cant import a module that exists? - Stack Overflow

1311:【例2.5】求逆序对 归并排序

1311&#xff1a;【例2.5】求逆序对 【题目描述】 给定一个序列a1,a2,…,an&#xff0c;如果存在i<j并且ai>aj&#xff0c;那么我们称之为逆序对&#xff0c;求逆序对的数目。 【输入】 第一行为n,表示序列长度&#xff0c;接下来的n行&#xff0c;第i1行表示序列中的第…

idea中定时+多数据源配置

因项目要求,需要定时从达梦数据库中取数据,并插入或更新到ORACLE数据库中 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-…

01读《物联网安全研究综述:威胁、检测与防御》随笔

01读《物联网安全研究综述&#xff1a;威胁、检测与防御》随笔 摘要3 研究现状3.1 安全威胁3.1.1 云平台访问控制缺陷3.1.2 云平台恶意应用3.1.3 云平台实体和应用交互漏洞3.1.4 通信协议漏洞3.1.5 通信流量侧信道信息泄露3.1.6 设备固件漏洞3.1.7 基于语音信道的攻击3.1.8 基于…

SpringBoot核心功能-temp

yml&类配置 Configuration-processor

软文写作需要避免的四大误区,媒介盒子分享

有不少企业在做软文推广时在文案上容易踩坑&#xff0c;导致推广不起效。今天媒介盒子就来和大家聊聊软文写作中需要避免的四大类型&#xff0c;帮助企业提高软文推广效率。 一、 文案没有核心点 一篇软文的价值在于软文阐述的核心点&#xff0c;若没有一个核心点加以细化撰写…

2023年【A特种设备相关管理(锅炉压力容器压力管道)】考试题及A特种设备相关管理(锅炉压力容器压力管道)考试内容

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试题是安全生产模拟考试一点通总题库中生成的一套A特种设备相关管理&#xff08;锅炉压力容器压力管道&#xff09;考试内容&#xff0c;安全生产模…

保姆级 Keras 实现 YOLO v3 三

保姆级 Keras 实现 YOLO v3 三 一. 分配 anchor box二. 正负样本匹配规则三. 为每一个 anchor box 打标签3.1 anchor box 长什么样?3.2 每一个 anchor box 标签需要填充的信息有哪些?3.3 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x, \Delta y, \Delta w, \Delta h) (Δx,Δy,…

SUPER-ADAM: Faster and Universal Framework of Adaptive Gradients

这周看了啥&#xff1a; 本周主要来看看别人是如何证明收敛的&#xff0c;围绕算法SUPER-ADAM 的更新过程和论文后面的证明&#xff0c;&#xff08;这篇证明比上周的亲切多了&#xff0c;我哭死&#xff09;仔细看了证明每一步的推导&#xff08;至于作者如何想出的&#xff…