【数据结构与算法】七大排序算法(上)

news2024/12/30 3:23:27

【数据结构与算法】七大排序算法(上)

🥕个人主页:开敲🍉

🔥所属专栏:数据结构与算法🍅

🌼文章目录🌼

1. 排序的概念及应用

    1.1 排序的概念

  1.2 排序的应用

    1.3 常见排序算法

2. 常见排序算法的实现

    2.1 插入排序

    2.1.1 直接插入排序

    2.1.2 希尔排序

    2.2 选择排序

      2.2.1 直接选择排序

      2.2.2 堆排序

1. 排序的概念及应用
    1.1 排序的概念

  排序所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
  稳定性假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
  内部排序数据元素全部放在内存中的排序。
  外部排序数据元素太多不能同时放在内存中,根据排序过程的要求不断地在内外存之间移动数据的排序。

  1.2 排序的应用

  

    1.3 常见排序算法

  冒泡排序动图演示:

    

直接插入排序动图演示:

希尔排序动图演示:

  希尔排序本质上还是插入排序,只不过在插入排序的基础上进行了优化。希尔排序在进行直接插入排序前会进行预排序,具体何为预排序下面会讲。

选择排序动图演示:

堆排序动图演示:

  

快速排序动图演示:

归并排序动图演示:

2. 常见排序算法的实现
    2.1 插入排序

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

  在实际生活中,我们打扑克牌时就用到了直接插入排序的方法:

    2.1.1 直接插入排序

  当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。

  直接插图排序的特性总结:

  ① 元素集合越接近有序,直接插入排序算法的时间效率越高

  ② 时间复杂度:O(N^2)

  ③ 空间复杂度:O(1),它是一种稳定的排序算法

  ④ 稳定性:稳定

    2.1.2 希尔排序

  希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。

希尔排序的特性总结:
 希尔排序是对直接插入排序的优化。
② 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
③ 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定:

    2.2 选择排序

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

      2.2.1 直接选择排序

  ① 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素

  ② 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换

  ③ 在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素

  直接选择排序特性总结:

  ① 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用

  ② 时间复杂度:O(N^2)

  ③ 空间复杂度:O(1)

  ④ 稳定性:不稳定

      2.2.2 堆排序

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

  

  (堆排序具体实现在:【数据结构与算法篇】二叉树顺序结构及实现-CSDN博客 中,感兴趣的可以自行学习了解~)

  堆排序的特性总结:

  ① 堆排序使用堆来选数,效率就高了很多

  ② 时间复杂度:O(N*logN)

  ③ 空间复杂度:O(1)

  ④ 稳定性:不稳定

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

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

相关文章

使用 Django 显示表中的数据

1、问题背景 当我们使用 Django 进行 Web 开发时,经常需要在 Web 页面上显示数据库中的数据。例如,我们可能需要在一个页面上显示所有用户的信息,或者在一个页面上显示所有文章的标题和作者。那么,如何使用 Django 来显示表中的数…

SSDReporter for Mac:守护您硬盘健康的守护者

SSDReporter for Mac是一款专为Mac用户设计的固态硬盘(SSD)健康状况检测工具。以下是关于这款软件的详细介绍: SSDReporter for Mac的主要功能是全面检测、监控Mac设备中SSD的工作状态,以确保数据的完整性和设备的稳定性。它能够…

常见的数据分析方法

1.周期性分析法 一个指标的观察时间拉长,看它是否有周期变化规律。周期性分析常见的有两者:自然周期和生命周期。自然周期,指业务指标会随着时间自然变化,如节假日用户/业绩出现下滑、产品销售额随季节变动等;生命周期,譬如“商品生命周期”、“APP生命周期”、“用户生…

卤菜销售|基于SSM+vue的智能卤菜销售平台的设计与实现(源码+数据库+文档)

智能卤菜销售平台 目录 基于SSM+vue的智能卤菜销售平台的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 4商家功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

力扣63 不同路径Ⅱ Java版本

文章目录 题目描述代码 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格…

媒体发布会怎么邀请媒体,到场采访报道?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体发布会的邀请和组织是一个需要精心策划的过程,以下是一些基本步骤和建议,以确保媒体发布会能够吸引媒体到场并进行有效的采访报道: 明确宣传目的和…

leetCode. 85. 最大矩形

leetCode. 85. 最大矩形 部分参考上一题链接 leetCode.84. 柱状图中最大的矩形 此题思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形…

特定车型专属AI模型解决方案,高清图像,稳定输出

美摄科技凭借其对人工智能领域的深刻理解和技术积累&#xff0c;为企业带来了一项革命性的解决方案——特定车型专属AI模型。这一方案以专属车型照片为基础&#xff0c;通过先进的AI生成模型训练&#xff0c;为企业提供个性化、高清、稳定的车辆图像和视频生成服务&#xff0c;…

【招聘帖】资深数通专家 ,薪资最高3.5W

资深数通专家 薪资&#xff1a;25000-35000 元/月 工作职责 岗位职责&#xff1a; 1、负责统筹管理客户全网问题&需求跟踪管理及汇报、日常数通团队工作的每日分解协调、人员技能内训及跟踪闭环&#xff1b; 2、负责统筹对架构基线梳理评估、软件版本管理、应急方案可执行…

2024年第七届管理、经济和社会科学国际会议(ICMESS 2024)

2024年第七届管理、经济和社会科学国际会议(ICMESS 2024) 会议简介 2024年第七届管理、经济和社会科学国际会议&#xff08;ICMESS 2024&#xff09;将为“管理、经济与社会发展”等最新研究领域的研究人员、专家、学者和行业专家提供一个平台&#xff0c;介绍他们的最新研究…

【区块链】fisco网络运维之添加节点黑名单

基于已完成的区块链系统与管理平台搭建工作&#xff0c;开展区块链节点的黑名单工作&#xff0c;具体操作如下 以node3为例子 1查看node0节点的连接状态日志&#xff08;现有4个节点连接&#xff09; 注意&#xff1a;如果查询不到连接状态&#xff0c;修改node0的配置文件中…

同时安装python2 和python3

最近的项目因为工具的原因 需要同时安装python2 和python3 我又想学着使用python 写东西 导致遇到了很多问题 记录下来 1 同时安装 python2 和python 1.1 安装完把/确认 Path 环境变量里 同时有python2,python2\Scripts和python3 ,python3\Scripts四个环境变量 修改python3…

前端本地项目启动供后端或者测试调试

目录 1、项目本地启动的地址 2、打开终端输入 ifconfig 查找ip 3、将localhost替换成ip即可供他人测试 1、项目本地启动的地址 http://localhost:8100/?module220&webRoutevpc-gray&backRoutevpc-gray........................... 2、打开终端输入 ifconfig 查找i…

文件IO(一)

文件IO&#xff08;一&#xff09; 文件IO文件的分类在文件IO下&#xff0c;文件分类按存储的内容分按照操作分 标准IO和文件IO的区别系统调用和库函数的区别 文件IO 把程序暂存在内存的数据&#xff0c;存储到本地外存上 文件的分类 在Linux系统下&#xff0c;文件共分为7类…

一套saas模式云MES系统源码,基于springboot+vue.js+uniapp开发

一套saas模式云MES系统源码&#xff0c;基于springbootvue.jsuniapp开发 MES系统简介 MES系统&#xff0c;即制造执行系统&#xff08;Manufacturing Execution System&#xff09;&#xff0c;是一种面向制造企业车间执行层的生产信息化管理系统。它位于上层的企业资源规划&a…

3步骤找回丢失文件!EasyRecovery让你轻松应对数据灾难!

EasyRecovery&#xff1a;数据丢失的终结者&#xff0c;您的数字世界守护神 在数字化时代&#xff0c;数据已经成为我们生活的一部分。无论是个人照片、重要文件还是企业资料&#xff0c;数据都扮演着重要的角色。然而&#xff0c;意外删除、格式化、系统崩溃或病毒攻击等原因导…

【Linux】权限的理解之权限掩码(umask)

目录 前言 一、利用八进制数值表示文件或目录的权限属性 二、系统默认的权限掩码和权限掩码的作用原理 三、分析权限掩码改变文件或目录的权限属性 前言 权限掩码是由4个数字组合而成的&#xff0c;默认的第一位数字是0&#xff1b;后三位数字分别由八进制位数字组成。权限…

Web服务器部署

简介 学习Liunx中Apache-web服务器的环境搭建及基础配置。 实验内容 实验准备 初始化yum&#xff0c;并安装httpd yum clean all #清理yum缓存 yum makecache #创建新缓存 yum install httpd #下载并安装web服务器 关闭防火墙、…

评测 香橙派OrangePi在智能交通上的应用

1、OrangePi应用场景 关于 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板&#xff0c;其搭载了昇腾 AI 处理器&#xff0c;可提供 8TOPS INT8 的计算能力&#xff0c;内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算&#…

【记录】网络|没有路由器没有网线,分别使用手机或Windows电脑共享网络给ARM64开发板,应急连接

事情是这样的&#xff0c;我的开发板明明已经选择了记住热点 WiFi 密码&#xff0c;但是却没有在开机的时候自动连接&#xff0c;我又没有放显示器在身边&#xff0c;又不想为了这点事去找个显示器来&#xff0c;就非常难受。 我手边有的设备是&#xff1a; 笔记本电脑&#…