数据结构——排序

news2024/11/27 2:24:13

排序

  • 一、排序的概念
  • 二、直接插入排序
    • 希尔排序
  • 三、直接选择排序
  • 四、堆排序
    • 1、堆的概念
    • 2、堆排序
  • 五、冒泡排序
  • 六、快速排序
  • 七、归并排序
  • 八、基数排序
  • 排序算法的时间复杂度和空间复杂度


一、排序的概念

课本概念(P165)
在这里插入图片描述

  • (1)内部排序。内部排序指待排序记录全部存放在内存中进行排序的过程。
  • (2)外部排序。外部排序指待排序记录的数量很大,以至于内存不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程。

在排序过程中需要进行下列两种基本操作:比较两个关键字的大小;将记录从一个位置移动到另一个位置。前一种操作对大多数排序方法来说都是必要的,后一种操作可以通过改变记录的存储方式来避免。

二、直接插入排序

直接插入排序:即当插入第i个记录时,Ri,Ra,…,R,均己排好序,因此,将第i个记录R,依次与R1,.,R,R进行比较,找到合适的位置插入。它简单明了,但速度很慢。

在这里插入图片描述
请添加图片描述

希尔排序

希尔(Shell) 排序:先取一个小于n的整数d,作为第一个增量,把文件的全部记录分成d个组。所有距离为q的倍数的记录放在同一个组中。先在各组内进行直接插入排序然后,取第二个增量 d 2 d_2 d2< d 1 d_1 d1重复上述的分组和排序,直至所取的增量d=1(d< d t − 1 d_{t-1} dt1<o< d 2 d_2 d2< d 1 d_1 d1),即所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。

在这里插入图片描述
在这里插入图片描述
请添加图片描述

三、直接选择排序

直接选择排序的过程是,首先在所有记录中选出排序码最小的记录,把它与第1个记录交换,然后在其余的记录内选出排序码最小的记录,与第2个记录交换……依次类推,直到所有记录排完为止。

在这里插入图片描述
请添加图片描述

四、堆排序

1、堆的概念

设有n个元素的序列{K,K,⋯,K,},当且仅当满足下述关系之一时,称之为堆。
(1) k i k_i ki k 2 i k_{2i} k2i, 且 k i k_i ki k 2 i + 1 k_{2i+1} k2i+1;
(2) k i k_i ki k 2 i k_{2i} k2i, 且 k i k_i ki k 2 i + 1 k_{2i+1} k2i+1;
其中(1)称为小顶堆,(2)称为大顶堆
在这里插入图片描述

2、堆排序

在这里插入图片描述

五、冒泡排序

冒泡排序的基本思想是,通过相邻元素之间的比较和交换,将排序码较小的元素逐渐从底部移向顶部。由于整个排序的过程就像水底下的气泡一样逐渐向上冒,因此称为冒泡算法。

请添加图片描述

六、快速排序

快速排序采用的是分治法,其基本思想是将原问题分解成若干个规模更小但结构与原问题相似的子问题。通过递归地解决这些子问题,然后再将这些子问题的解组合成原问题的解。快速排序通常包括两个步骤:第一步,在待排序的n个记录中任取一个记录,以该记录的排序码为准,将所有记录都分成两组,第1组都小于该数,第2组都大于该数,如图所示。第二步,采用相同的方法对左、右两组分别进行排序,直到所有记录都排到相应的位置为止。

七、归并排序

归并也称为合并,是将两个或两个以上的有序子表合井成一个新的有序表。若将两个有序表合井成一个有序表,则称为二路合并。合并的过程是:比较A[i]和A[j]的排序码大小,若A[i]的排序码小于等于A[j]的排序码,则将第一个有序表中的元素A[i]复制到R[k]中,并令i和k分别加1;如此循环下去,直到其中一个有序表比较和复制完,然后再将另一个有序表的剩余元素复制到R中。
在这里插入图片描述

请添加图片描述

八、基数排序

基数排序是一种借助多关键字排序思想对单逻辑关键字进行排序的方法。基数排序不是基于关键字比较的排序方法,它适合于元素很多而关键字较少的序列。基数的选择和关键字的分解是根据关键字的类型来决定的,例如关键字是十进制数,则按个位、十位来分解。

在这里插入图片描述

排序算法的时间复杂度和空间复杂度

在这里插入图片描述

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

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

相关文章

一图看懂 pyexcel_io 模块:提供统一 API用来读写操作 Excel 文件的库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pyexcel_io 模块&#xff1a;提供统一 API用来读写操作 Excel 文件的库, 资料整理笔记&#xff08;大全&#xff09;摘要模块图类关系图模块全展开【pyexcel_io】统计常量s…

【LeetCode】剑指 Offer 59. 队列的最大值 p288 -- Java Version

1. 题目介绍&#xff08;59. 队列的最大值&#xff09; 面试题59&#xff1a;队列的最大值&#xff0c; 一共分为两小题&#xff1a; 题目一&#xff1a;滑动窗口的最大值题目二&#xff1a;队列的最大值 2. 题目1&#xff1a;滑动窗口的最大值 题目链接&#xff1a;https://l…

3.rabbitmq-集群

1.修改3台的主机名称,也可以不改 vi /etc/hostname 2.配置各个节点的host文件,让各节点都能识别对方 vi /etc/hosts 192.168.3.132 host-rabbitmq 192.168.3.133 host-rabbitmq2 192.168.3.134 host-rabbitmq3 3.以确保各个节点的cookie文件使用的同一个值 在node1上执行远程命…

基于矩阵分解的推荐算法

1.背景 推荐系统的两大应用场景分别是评分预测(Rating Prediction)和Top-N推荐(Item Ranking)。其中评分预测主要用于评价网站&#xff0c;比如用户给自己看过的电影评多少分&#xff0c;或者用户给自己看过的书籍评价多少分&#xff0c;矩阵分解技术主要应用于评分预测问题&am…

买车了

最近先后去试驾了比小鹏P7i、蔚来ET5、智己LS7、亚迪汉这几辆车&#xff0c;这四个品牌总共花了三天时间&#xff0c;也算是比较深度的试驾吧&#xff0c;静态和动态、前后排、主副驾都感受了一下。前面写了比亚迪汉的试驾体验&#xff0c;详细分析了它的优缺点&#xff1a;不愧…

Vue过滤器、自定义指令、组件

目录 一&#xff1a;生命周期 1.1 生命周期实例 1.2 生命周期函数&#xff08;引入&#xff09; 二&#xff1a;过滤器 三&#xff1a;自定义指令 四&#xff1a;组件 4.1 非单文件组件 4.2 组件的嵌套 4.3 单文件组件 模板 4.3.1 架构 4.3.2 不同版本的vue.JS 4…

ASRT语音识别系统部署及模型训练笔记

ASRT语音识别系统部署及模型训练笔记 前言 ASRT是一个中文语音识别系统&#xff0c;由AI柠檬博主开源在GitHub上。 GitHub地址&#xff1a;nl8590687/ASRT_SpeechRecognition 国内Gitee镜像地址&#xff1a;AI柠檬/ASRT_SpeechRecognition 文档地址&#xff1a;ASRT语音识…

ping telnet curl的使用方法和应用场景

文章目录一、区别二、使用方法pingtelnetcurl三、应用场景一、区别 ping命令基于ICMP协议&#xff0c;通过发送发送ICMP数据包&#xff0c;并查看对方是否有返回数据来检测网络是否连通&#xff0c;仅包含控制信息&#xff0c;不包含端口号; telnet是对服务器的远程登录&#…

全网火爆,Python接口自动化测试,从0到1分层封装框架撸码(带接口)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 随着行业内卷越来越…

3D开发工具HOOPS最新解析合集,助力实现web端高性能模型渲染

一、3D技术为创新提供强大助力 不管您想搭建桌面、WEB或者移动端APP应用&#xff0c;技术领先全球的HOOPS Platform组件都可以为您提供弹性的3D集成架构&#xff0c;同时&#xff0c;一批可信任的工业领域3D技术专家也将为您提供技术支持服务。 如果您的客户期望有一种在多个…

Docker 配置远程访问

Docker客户端通常通过Unix套接字在本地与守护程序通信 /var/run/docker.sock&#xff0c;或通过网络通过TCP套接字。 以下是启动时提供给Docker守护程序的选项的典型示例&#xff1a; # ps -ef |grep dockerd root 23438 1 0 00:41 ? 00:00:03 /usr/bin/dock…

Spring入门案例--IOC入门案例

IOC入门案例思路分析 (1)Spring是使用容器来管理bean对象的&#xff0c;那么管什么? 主要管理项目中所使用到的类对象&#xff0c;比如(Service和Dao) (2)如何将被管理的对象告知IOC容器? 使用配置文件 (3)被管理的对象交给IOC容器&#xff0c;要想从容器中获取对象&…

TCP协议详解

1.TCP的准备条件在古代的时候&#xff0c;古人们经常写书信进行交流&#xff0c;写书信的前提是你要知道这份信是要寄给谁在网络中&#xff0c;我们通过ip端口号找对目标对象&#xff0c;但是现在网站一般会对ip端口注册一个域名&#xff0c;所以我们一般就是对域名进行查找&am…

minikube安装与运行(阿里云环境运行)

说下为啥选择云环境&#xff0c;最开始在本地电脑上安装的minikube&#xff0c;但是由于国内的网络访问不了谷歌的镜像仓库&#xff0c;安装ingress-nginx或者其他插件时着实的恶心。要不翻墙&#xff0c;要不自己搭建个镜像仓库。最终决定用阿里云境外的节点&#xff0c;按小时…

Windows操作系统C盘快速扩容工具推荐

Windows 系统C 盘扩容教程 1️⃣前言 大家在使用电脑过程中&#xff0c;随着时间的推移&#xff0c;经常会发现C盘空间爆红的情况&#xff0c;主 要原因是电脑软件在使用过程中产生的缓存文件或者日志文件大部分都会存储在C盘&#xff0c;这样时间一久&#xff0c;C盘的存储空…

不联网新华字典

介绍 首页字典 更多 包含内容 内容对应Json数据文件百家姓baijiaxing.json曹操诗集caocao.json弟子规dizigui.json成语idiom.json论语lunyu.json纳兰性德诗集nalanshiji.json千家诗qianjiashi.json千字文qianziwen.json三字经-传统版sanzijing_ct.json三字经-新版sanzijing_x…

「STM32入门」TIM定时中断

定时器的简介 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断&#xff0c;在中断内可以执行中断事件不仅具备基本的定时中断功能&#xff0c;而且还包含内外时钟源选择&#xff0c;主从触发模式&#xff0c;输入捕获&#xff0c;输出捕获&#xff…

MySQL调优笔记——慢SQL优化记录

上周&#xff0c;项目出现线上问题&#xff0c;在这家公司做的是一个SAAS平台&#xff0c;总用户量大约10万人&#xff1b; 经过排查&#xff0c;发现是SQL问题&#xff0c;导致数据库响应慢&#xff0c;进而拖垮了整体服务&#xff1b; 通常&#xff0c;查询耗时较长的SQL涉…

我在windows10下,使用CMake gui 编译krita源码,CMake gui报错:LibMyPaint_DIR-NOTFOUND

系列文章目录 文章目录系列文章目录前言一、原因二、解决1.引入库前言 我在windows10下&#xff0c;使用CMake gui 编译krita源码 where is the source code:E:/krita-dev/krita where to build the binaries:E:/krita-dev/krita_camke current generator:MinGW Makefiles 分别…

ios证书申请流程

mac电脑-钥匙串-请求证书-得到CertificateSigningRequest 2.创建Identifiers &#xff08;1&#xff09; (2) (3) (4) 如要接推送等 勾&#xff1a;Push Notifications 如要生成universal links 勾&#xff1a;Associated Domains 3.创建Certificates 注意&#xff1a;需…