排序-初遇

tech2023-03-07  145

排序

关于排序的稳定性

我们常常说什么什么排序算法是稳定的,什么是不稳定的,到底是啥呢?

比如说吧有一段数据,这段无序的数据需要我们对其进行排序,这段数据中有很多重复的关键字,当我们用某种算法对其进行排序之后,这些重复的关键字之间的相对次序保持不变,我们就说这个排序算法是稳定的,反之就是不稳定的。

排序的分类

内排序

定义:排序的时候不涉及到内外存交换

适用场景:适用于记录数不多,一个文件就可以放得下的时候

对于内排序,按照策略进行划分,可以细分为以下几种:

插入排序选择排序交换排序归并排序分配排序
外排序

定义:排序的时候涉及到了内外存交换

适用场景:适用于记录数很多,一个文件放不下,需要用到多个文件的时候

对于外排序,可以进一步分为:

合并排序法直接合并排序法

如何分析排序算法的好坏

我们需要考虑到三种情况下的算法效率,最好情况(给的序列是排序好的),最坏情况(给的序列是倒序的),平均情况(给的序列是随机的)

Q:为什么不直接比较俩算法的运行时间来判断谁优谁劣呢?

A:有的算法依赖于原始记录的情况,有的A情况好,B情况却不好了,所以这样判断的话太片面

Q:为什么不直接看算法中比较的次数,谁少不就谁优秀嘛?

A:看算法比较次数是比较传统的方法,但是,没有考虑到一种情况,记录也许很大,导致记录的移动是影响整个运行时间的因素,所以不单单靠次数可以决定的了

所以我们综合考虑比较次数和移动次数,所以就有了刚开始说的三种情况最好,最坏和平均。


参考:数据结构与算法分析(Java语言描述)

最新回复(0)