【数据结构】带你初步了解排序算法

news2024/9/19 22:45:23

在这里插入图片描述

文章目录

  • 1. 排序的概念及运用
    • 1.1 概念
    • 1.2 运用
  • 2. 常见的排序算法
    • 2.1 插入排序
      • 2.1.1 直接插入排序(简单插入排序)
      • 2.1.2 希尔排序
    • 2.2 选择排序
      • 2.2.1 直接选择排序(简单选择排序)
      • 2.2.2 堆排序
    • 2.3 交换排序
      • 2.3.1 冒泡排序
      • 2.3.2 快速排序
    • 2.4 归并排序
    • 2.5 非比较排序——计数排序
    • 2.6 非比较排序——桶排序
    • 2.7 非比较排序——基数排序
  • 结语

1. 排序的概念及运用

1.1 概念

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

1.2 运用

购物筛选排序

在这里插入图片描述

院校排名

在这里插入图片描述

2. 常见的排序算法

在这里插入图片描述

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。

线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

2.1 插入排序

2.1.1 直接插入排序(简单插入排序)

直接插入排序是一种简单的插入排序法

基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。

在这里插入图片描述

实际中我们玩扑克牌时,就用了插入排序的思想。

2.1.2 希尔排序

希尔排序法又称缩小增量法

基本思想:先选定一个整数(通常是 g a p = n / 3 + 1 gap = n/3+1 gap=n/3+1),把待排序文件所有记录分成各组,所有的距离相等的记录分在同一组内,并对每一组内的记录进行排序,然后 g a p = g a p / 3 + 1 gap=gap/3+1 gap=gap/3+1得到下一个整数,再将数组分成各组,进行插入排序,当 g a p = 1 gap=1 gap=1时,就相当于直接插入排序

它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接入排序算法的。

2.2 选择排序

2.2.1 直接选择排序(简单选择排序)

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O ( n 2 ) O(n^2) O(n2)的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

基本思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

2.2.2 堆排序

基本思想:堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。

在这里插入图片描述

2.3 交换排序

所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。

交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动(以升序为例)

2.3.1 冒泡排序

冒泡排序是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。

基本思想:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。

在这里插入图片描述

2.3.2 快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法

基本思想:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值(以升序为例),然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

2.4 归并排序

基本思想:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divideand Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

2.5 非比较排序——计数排序

上面介绍的都是基于比较的排序,而计数排序不需要比较就能够对整数进行排序,但注意的是这种排序算法也只能对整数进行排序

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

特征

当输入的元素是n个0到k之间的整数时,它的运行时间是 O ( n + k ) O(n + k) O(n+k)计数排序不是比较排序,排序的速度快于任何比较排序算法

由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。例如:计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。但是,计数排序可以用在基数排序中的算法来排序数据范围很大的数组。

通俗地理解,例如有 10 个年龄不同的人,统计出有 8 个人的年龄比 A 小,那 A 的年龄就排在第 9 位,用这个方法可以得到其他每个人的位置,也就排好了序。当然,年龄有重复时需要特殊处理(保证稳定性),这就是为什么最后要反向填充目标数组,以及将每个数字的统计减去1的原因。

2.6 非比较排序——桶排序

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。

桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。

2.7 非比较排序——基数排序

基数排序(英语:Radix sort)是一种非比较型的排序算法,最早用于解决卡片排序的问题。基数排序将待排序的元素拆分为k个关键字,逐一对各个关键字排序后完成对所有元素的排序。

如果是从第1关键字到第关键字顺序进行比较,则该基数排序称为 MSD(Most Significant Digit first)基数排序;
如果是从第k关键字到第1关键字顺序进行比较,则该基数排序称为 LSD(Least Significant Digit first)基数排序。

对于LSD来说,基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。(MSD则与之相反)

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

结语

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下。

也可以点点关注,避免以后找不到我哦!

Crossoads主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的动力!

带你初步了解排序算法:https://blog.csdn.net/2301_80191662/article/details/142211265
十大经典排序算法总结与分析:https://blog.csdn.net/2301_80191662/article/details/142211564

在这里插入图片描述

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

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

相关文章

python | 2行命令解决pip模块不存在问题

一、报错情况 有时,在执行 pip 更新命令后,会提示更新失败或错误警告。 报错提示如下: 然后,再次使用 pip 安装命令时,会提示 pip 模块找不到或不存在: ModuleNotFoundError: No module named pip 导致…

在线IP代理检测:保护您的网络安全

在互联网飞速发展的今天,越来越多的人开始意识到网络安全和隐私保护的重要性。在线IP代理检测工具作为一种有效的网络安全手段,能够帮助用户识别和检测IP代理的使用情况,从而更好地保护个人隐私和数据安全。本文将详细介绍在线IP代理检测的相…

SQL数据库(MySQL)

一、在Ubuntu系统下安装MySQL数据库 1、更新软件源,在确保ubuntu系统能正常上网的情况下执行以下命令 sudo apt-get update 2、安装MySQL数据库及相关软件包 # 安装过程中设置root用户的密码 123456 sudo apt-get install mysql-server ​ # 安装访问数据库的客…

Rsync——远程同步

目录 一、rsync远程同步概述 1、rsync 简介 2、rsync的同步方式 3、rsync的备份方式 4、rsync与cp、scp对比 二、常用rsync命令 1、基本格式 2、配置源的两种表达方法 三、搭建rsync下行同步 1、搭建环境 2、配置rsync源服务器(172.16.88.44)…

出版学术专著需要具备哪些条件?

出版学术专著通常需要具备以下条件: 一、学术价值 1. 创新性 - 你的专著应在研究主题、方法、观点等方面具有一定的创新性。这可以是提出新的理论框架、发现新的现象、采用新的研究方法或对已有理论进行新的阐释和拓展。 - 例如,在某一特定学科领域中&…

【北京迅为】《STM32MP157开发板使用手册》- 第二十七章Cortex-M4按键实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

跟《经济学人》学英文:2024年09月07日这期 What to read about the British economy

What to read about the British economy Britain used to be the world’s richest country. These six books explain how it came to be, and why it is no longer 原文: IN RECENT YEARS the British economy has tended to be in the news for the wrong re…

凯伦股份融合®️TMP复合瓦系统实力硬扛摩羯台风

第11号台风“摩羯”,今年以来登陆我国的最强台风,也是继2014年“威马逊”之后登陆我国的最强台风。 沿海多地发布防风Ⅰ级应急响应,多市启动落实“六停”措施。面对17级台风,工商业厂房遭受严重的破坏。据前方报道,当地…

Vue实用操作篇-1-第一个 Vue 程序

安装 Vue 非常的简便&#xff0c;只需下载好 Vue 对应的 .js 文件&#xff0c;在 html 中引入 vue.js 即可使用 Vue 下载好了 vue.js 我们便可以编写我们的第一个 vue 程序了 <!doctype html> <html lang"zh-CN"><head><meta charset"utf…

【数据结构】十大经典排序算法总结与分析

文章目录 前言1. 十大经典排序算法分类2. 相关概念3. 十大经典算法总结4. 补充内容4.1 比较排序和非比较排序的区别4.2 稳定的算法就真的稳定了吗&#xff1f;4.3 稳定的意义4.4 时间复杂度的补充4.5 空间复杂度补充 结语 前言 排序算法是《数据结构与算法》中最基本的算法之一…

计算机视觉(一)—— 特刊推荐

特刊征稿 01 期刊名称&#xff1a; Computer Vision for Smart Cities 截止时间&#xff1a; 提交截止日期&#xff1a;2024 年 12 月 31 日 目标及范围&#xff1a; 以下是一些潜在的主题&#xff1a; 城市交通和交通管理&#xff1a; • 车辆检测和跟踪以实现高效的交通流…

相机SD卡删除的照片可以恢复吗?6个方法,快速找回删除照片!

相机SD卡的照片在相机中误删了&#xff0c;有什么恢复办法吗&#xff1f;今天我要和大家分享一些关于如何恢复相机SD卡中删除的照片的方法。相信很多摄影爱好者都遇到过不小心删除了重要照片的情况&#xff0c;这时候我们该怎么办呢&#xff1f;别担心&#xff0c;下面我将为大…

野兔在线工具箱系统(市面上最强最多)最新版本更新2024.9

野兔在线工具箱系统&#xff0c;采用最新ThinkPHP8框架开发完成&#xff0c;也是基于YETUADMIN开发的工具箱系统&#xff0c;这次野兔在线工具系统更新&#xff0c;更新了几个新的功能模块&#xff0c;和已知的问题&#xff0c;修复系统部分功能。 程序开发 程序名称&#xf…

【生产力必备工具】GPU加速计算的首选云服务——蓝耘GPU(点击我的链接注册登录,可获50使用卷)

点击下面我的链接注册并登录&#xff0c;可获50使用卷&#xff1a;https://cloud.lanyun.net/#/registerPage?promoterCode11f606c51ehttps://cloud.lanyun.net/#/registerPage?promoterCode11f606c51e获得广泛丰富的NVIDIA高端GPU选择。高可配置高可用&#xff0c;专为大规模…

Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式)

前言: 发个之前的库存… Linux之CentOS 7.9-Minimal部署Oracle 11g r2 安装实测验证(桌面模式) 本次验证的是CentOS_7_Minimal-2009桌面模式来部署Oracle 11g r2,大家可根据自身环境及学习来了解。 环境:下载地址都给你们超链好了 1、Linux系统镜像包: 1.1 CentOS-7-x86_…

系统出现d3dcompiler_47.dll缺失怎么修复?总结6种d3dcompiler_47.dll修复方法

在现代电脑游戏中&#xff0c;​d3dcompiler_47.dll​ 文件是一个非常重要的组件&#xff0c;它用于DirectX应用程序的编译。然而&#xff0c;许多用户在尝试运行游戏或应用程序时&#xff0c;都会遇到“d3dcompiler_47.dll缺失”的错误。本文将为您提供解决此问题的详细步骤和…

2024年江西省职业院校技能大赛赛项规程 (简要概括)

这里写目录标题 一、赛项说明二、大赛时间三、参赛资格四、名额分配五、竞赛规程六、选拔方式七、报名办法八、奖项设置九、大赛QQ群十、资格审查 一、赛项说明 二、大赛时间 2024年十月至十二月 具体时间 地点 参考 赛项信息表 三、参赛资格 四、名额分配 五、竞赛规程 六、…

安全、稳定、高速的跨国文件传输系统

在全球化的大潮中&#xff0c;跨国企业的合作日益频繁&#xff0c;这使得跨国文件传输变得至关重要。企业在这一过程中追求的是快速、安全且稳定的文件传输服务。然而&#xff0c;跨国传输文件时&#xff0c;企业往往会遇到一些挑战。 要实现跨国文件传输的高效、安全与稳定&am…

DAPIER™(大片儿),一款专业的计算机艺术软件,一键式计算机艺术品快速智能(非AI)生成程序

DAPIER™是北京联高软件开发有限公司开发的计算机艺术软件&#xff0c;艺术的计算机生成类软件。 看看一些效果图吧。

OpenAI发布o1,首个具备‘推理’能力的模型

OpenAI 正在发布一个名为 o1 的新模型&#xff0c;这是计划中的一系列“推理”模型中的第一个&#xff0c;训练它们以回答比人类更复杂的问题&#xff0c;速度更快。同期发布的还有 o1-mini&#xff0c;一个更小、更便宜的版本。是的&#xff0c;如果你对AI界的传闻很熟悉&…