
有许多人告诉我们,前方有美丽的风景,却没有一个人能代替我们走过
这茫茫的夜路。在这个光怪陆离的人间,没有谁可以将日子过得行云流水,
那些历经劫数,尝遍百味的人都明白一个道理:不期盼别人,踏实而务实
让自己的生活简单而真实,我们遇到的所有难题都是为了让我们变得更加强大。
风雨过后,终会迎来彩虹,当那时,万物终将明朗,一切皆如你意。
—————— 一禅心灵庙语
| 排序算法 | 平均时间复杂度 | 最好的情况 | 最坏的情况 | 空间复杂度 | 排序方式 | 稳定性 |
|---|---|---|---|---|---|---|
| 冒泡排序 | O(n2) | O(n) | o(n2) | O(1) | In-place | 稳定 |
| 选择排序 | O(n2) | O(n2) | O(n2) | O(1) | In-place | 不稳定 |
| 插入排序 | O(n2) | O(n) | O(n2) | O(1) | In-place | 稳定 |
| 希尔排序 | O(n log n) | O(n log2 n) | O(n log2 n) | O(1) | In-place | 不稳定 |
| 归并排序 | O(n log n) | O(n log n) | O(n log n) | O(n) | Out-place | 稳定 |
| 快速排序 | O(n log n) | O(n log n) | O(n log n) | O(log n) | In -place | 不稳定 |
| 堆排序 | O(n log n) | O(n log n) | O( n log n) | O(1) | in-place | 不稳定 |
| 计数排序 | O(n + k) | O(n + k) | O(n + k) | O(k) | Out-place | 稳定 |
| 桶排序 | O(n + k) | O(n + k) | O(n2) | O(n + k) | Out-place | 稳定 |
| 基数排序 | O(n * k) | O(n * k) | O(n * k) | O(n + k) | Out-place | 稳定 |
相关术语解释:

排序的稳定性有什么有呢 ?? ?
假设我们有这样一个场景:面试:10 个人笔试编程题,其中有两个人的分数都是 100 分 分别是 小华,小红的,但是,我们只能录用一个人。其中小华 比 小红 提前了 半个小时,先提交的答案。这时显而易见,我们是录用先提交的 小华了。而不稳定的排序算法,是无法保证提前交答案的小华,是排序在小红的前面的,因为数值都是 100,而 我们的稳定的排序算法是可以保证,提前交答案的小华一定是在小红的前面的。这里就体现了,排序算法中稳定性的价值所在。
我个人不希望大家,是单单的记住死记硬背,而是可以理解其中的缘由,而排序的稳定性比较好讲解,有比较重要,所以多唠唠。
冒泡排序是 稳定的 ,因为:我们两两比较时,我们可以通过修改算法,当数值相同时,不交换,这样,前面出现的相同的数值就不会出现在后面同样的是数值后面了。如下图所示:

n-1 次数值间的比较,从 n -i+1 个数据中选出序列中最小的数值,并和 第 i ( 1<= i <= n)个数值交换。更详细的内容大家可以移步到 :🔜🔜🔜 数据结构:静动图结合,活灵活现 讲解—— 堆排序, 直接选择排序_ChinaRainbowSea的博客-CSDN博客选择排序是:不稳定的,可能存在,经过排序后,会改变相同数值的顺序。这时通过算法无法改变的。

插入排序是 稳定的 ,我们可以通过算法,将相同的数值,不改变其顺序,如下图:

希尔排序是 不稳定 的,因为预排序会打乱相同数值原本的顺序,相同的数值可能会分到不同的组中,进行排序,该现象无法通过算法改变。如下图:

n-1 个序列重新构造一个堆,这样就会得到 n 个元素中的次大值。更详细的内容大家可以移步到 :🔜🔜🔜 数据结构:静动图结合,活灵活现 讲解—— 堆排序, 直接选择排序_ChinaRainbowSea的博客-CSDN博客堆排序是 不稳定 的,因为在堆排序中,升序,建大顶堆,后交换末尾元素 与 堆顶最大值,又重新建堆,这样的操作,改变了相同数值之间原来的前后顺序。如下图:

n 个记录,则可以看成是 n 个有序的子序列,每个子序列的长度为 1 ,然后两两归并,得到 [n/2] (x 表示不小于 x 的最小整数) 个长度为 2 或 1 的有序子序列;再两两归并,…,如此重复,直至得到一个长度为 n 的有序序列为止。更详细的内容大家可以移步到 :🔜🔜🔜 动静图结合详解: 归并排序 ,计数排序_ChinaRainbowSea的博客-CSDN博客归并排序是 稳定 的,可以通过算法到达,相同数值之间原来的顺序不发生改变。如下图所示:

快速排序是 不稳定 的,取分界值,用于分界时,可能会改变相同数值之间原来的前后顺序。如下图:

计数排序是 稳定 的,通过依次统计序列出现的个数,原本顺序是如何就是,如何,相同的数值之间的顺序前后,不会发生改变。具体如下图:

具体如下:动图如下:





当数据量太大的时候,所耗费的额外空间较大,是原始数据的 10 倍空间
限于自身水平,其中存在的错误,希望大家给予指教,韩信点兵——多多益善,谢谢大家,后会有期,江湖再见 !!!
