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

一、排序方法分类

按照数据存储介质

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

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

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

按照比较器个数:

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

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

按主要操作:

比较排序:用比较的方法

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

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

按辅助空间:

原地排序:辅助空间用量为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、如何在输出堆顶元素后,调整剩余元素为一个新的堆?

小根堆:

筛选算法

堆的建立

算法

五、归并排序

二路归并排序

思想:

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

是一个稳定排序

例子

归并树

算法

简单了解一下

六、基数排序

思想:

分配+收集

是稳定的

例子

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

七、各种排序比较

时间性能

空间性能

稳定性能

相关推荐
LNTON羚通3 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
哭泣的眼泪4084 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Microsoft Word5 小时前
c++基础语法
开发语言·c++·算法
天才在此5 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
莫叫石榴姐6 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
茶猫_7 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
Hera_Yc.H8 小时前
数据结构之一:复杂度
数据结构
肥猪猪爸9 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
linux_carlos9 小时前
环形缓冲区
数据结构
readmancynn9 小时前
二分基本实现
数据结构·算法