数据结构与算法 第12天(排序)

news2024/11/17 10:23:55

一、排序方法分类

按照数据存储介质

内部排序:数据量不大、数据在内存,无需内外存交换数据

外部排序:数据量较大、数据在外存(文件排序)

将数据分批调入内存排序,结果放到外存

按照比较器个数:

串行排序:单处理机(同一时刻比较一对元素)

并行排序:多处理机(同一时刻比较多对元素)

按主要操作:

比较排序:用比较的方法

插入排序、交换排序、选择排序、归并排序

基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置

按辅助空间:

原地排序:辅助空间用量为O(1)的排序方法。

非原地排序:辅助空间用量超过O(1)的排序方法

按稳定性:

稳定排序:能够使任何数值相等的元素,排序以后相对次序不变

非稳定排序:不是稳定排序的方法。

例子:

排序的稳定性只对结构类型数据排序有意义,不能衡量一个算法的优劣

按自然性:

自然排序:输入数据越有序排序的速度越快的排序方法。

非自然排序:不是自然排序的方法。

二、插入排序

类似于扑克牌插牌,便插入边排序

顺序法

每循环一次,需要比较两次,可以使用哨兵,简化算法

算法

二分法

希尔排序

缩小增量多遍插入排序

先将整个待排记录席列分割成若干子序列,分别进行直接插入排序待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

希尔排序是不稳定的

算法

三、交换排序

冒泡排序

每趟不断将记录两两比较,并按规则交换,每一趟排好一个,是稳定的

n个元素需要n-1趟,第m趟需要比较n-m次

算法

优点:每趟结束时,不仅能挤出一个最大值到最后面位置,还能同时理顺其他元素

优化:某次没有交换就说明已经排好序了

给算法加一个标记

快速排序

不是原地排序,是一种不稳定的算法,是所有内排序中最优的

不适于对基本有序的序列排序,会退化成冒泡排序

思路

从后面找比49小的放前面,后面就会空一个

再从前面找一个比49大的放后面,前面就会空一个,以此类推

算法

四、选择排序

简单选择排序

在待排序的数据中选出最大(小)的元素放在其最终的位置,是不稳定排序

基本操作

1.首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换
2.再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将
它与第二个记录交换
3.重复上述操作,共进行n-1趟排序后,排序结束

算法

堆排序

概念

堆实质是满足完全二叉树的性质

完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点

不稳定

堆排序

大根堆的根是最大值,小根堆的值是最小值

实现堆排序需解决两个问题:

1、如何由一个无序序列建成一个堆?

对一个无序数列反复进行筛选

例子

2、如何在输出堆顶元素后,调整剩余元素为一个新的堆?

小根堆:

筛选算法

堆的建立

算法

五、归并排序

二路归并排序

思想:

将两个或两个以上的有序子序列“归并”为一个有序序列

是一个稳定排序

例子

归并树

算法

简单了解一下

六、基数排序

思想:

分配+收集

是稳定的

例子

在分别按照,十位百位分配收集,最终得到有序数列

七、各种排序比较

时间性能

空间性能

稳定性能

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

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

相关文章

微带结环行器仿真分析+HFSS工程文件

微带结环行器仿真分析HFSS工程文件 工程下载:微带结环行器仿真分析HFSS工程文件 我使用HFSS版本的是HFSS 2024 R2 参考书籍《微波铁氧体器件HFSS设计原理》和视频微带结环行器HFSS仿真 1、环形器简介 环行器是一个有单向传输特性的三端口器件,它表明…

大数据之Flink(六)

17、Flink CEP 17.1、概念 17.1.1、CEP CEP是“复杂事件处理(Complex Event Processing)”的缩写;而 Flink CEP,就是 Flink 实现的一个用于复杂事件处理的库(library)。 总结起来,复杂事件处…

IM项目运行说明

注册登录以及消息列表界面: 联系人界面:新的好友/群聊列表/好友列表 界面: 群聊界面:群聊不想支持发视频,因为非技术上的麻烦原因。。。 图片可以下载: 私聊可以发视频: 私聊支持服务器消…

android kotlin 数据类 data class

1、Kotlin中的数据类主要用于保存数据。对于每个数据类,编译器会自动生成其他成员函数,允许您将实例打印到可读输出、比较实例、复制实例等。 中文文档: https://book.kotlincn.net/text/data-classes.html 2、新建文件dataClassTest.kt 3…

vue解决“用户代理样式表“边距问题

一、问题 当我们制作页面的时候,会发现页面会多出边距 打开控制台发现,是使用了“用户代理样式表” 这个无法去除,但是又觉得页面有间隙不好看,那怎么去除间隙?? 二、解决 将要写的东西放在div里&#x…

大模型笔记02--基于fastgpt和oneapi构建大模型应用平台

大模型笔记02--基于fastgpt和oneapi构建大模型应用平台 介绍部署&测试部署fastgptoneapi服务部署向量模型m3e和nomic-embed-text测试大模型 注意事项说明 介绍 随着大模型的快速发展,众多IT科技厂商都开发训练了各自的大模型,并提供了各具特色的AI产…

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和target,首先想到的…

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 …

计算机毕业设计选题推荐-乐器推荐系统-乐器商城-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 11部署BGP

本章应有助于回答以下问题: 核心的配置概念是什么?如何为 Clos 网络配置 BGP ?无编号的 BGP 如何工作?如何配置 BGP 与主机上的 BGP 发言者 (例如 Kube-router) 建立对等关系?如何配置 BGP 以对网络进行计划维护? 核心的 BGP 配置概念 全局BGP 配置,包含: r…

了解开源消息代理RabbitMQ

1.RabbitMQ 是什么? RabbitMQ是一个消息代理:它接受并转发消息。你可以把它想象成邮局:当你把要寄的邮件放进邮箱时,你可以确定邮递员最终会把邮件送到收件人那里。在这个比喻中,RabbitMQ是一个邮筒、一个邮局和一个邮递员。RabbitMQ和邮局之…

JavaScript 循环分支语句-for循环

先n1,判断n是否<10,满足条件&#xff0c;n1&#xff0c;输出n&#xff0c;再次判断n是否<10&#xff0c;循环.......... <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Comp…

SQL进阶技巧:截止当前批次前的批次量与订单量 | 移动窗口问题

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 表A有如下字段,user id(用户ID),batch id(批次ID),order id(订单ID),create time(创建时间),同一个用户ID下有多个批次,同一个批次下有多个订单ID,相同批次ID的创建时间是相同的,创建时间精确到了秒。 统计,截…

如何通过ip命令修改网卡名?(ip link set en1p0f0 name eth0)

快速提取 ip link set enp1s0f0 down ip link set enp1s0f0 name eth0 ip link set enp1s0f0 up ifconfig eth0背景 ifconfig命令不支持修改网卡名字。可以使用ip link进行修改。 从Linux 4.9版本开始&#xff0c;ip link 命令支持一个 set 子命令&#xff0c;可以用来修改接…

iPhone16全系采用A18处理器,不再区别对待,市场压力所致

iPhone16即将在3天后发布&#xff0c;外媒基本确定今年的iPhone16将全系采用A18处理器&#xff0c;与此前的基本款采用上一代处理器有很大的差异&#xff0c;这对于苹果用户来说无疑是一大利好&#xff0c;也将有助于推动iPhone16的销售。 此前的iPhone14和iPhone15&#xff0c…

[Redis] Redis基本命令与数据类型+单线程模型

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【springboot】使用AOP

目录 1. 添加依赖2. 创建切面类1. 创建切面类2. 切点表达式3. 增强方法 3. 开启AOP4. 创建控制类5. 测试 1. 添加依赖 <!-- AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop<…

【iOS】MVC入门

【iOS】MVC模式的学习 文章目录 【iOS】MVC模式的学习前言MVC模式概念MVC的交流模式MVC的一个简单实践Model层View层Controller层 MVC的优点与缺点总结 前言 笔者在暑假的学习中完成了一些小项目&#xff0c;这些小项目中间有时候出现了一个小bug都要寻找很久&#xff0c;而且会…

前端学习笔记-Web APls篇-05

Bom操作 1.Window对象 1.1BOM(浏览器对象模型&#xff09; BOM(Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都…

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT&#xff0c;这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频&#xff0c;并利用 SAM 2 进行 3D 空间分割&#xff0c;无需进一步训练或 2D-3D 投影。 我们的框架…