算法与数据结构 · 教程

排序算法

排序算法开篇

排序算法有很多,比如常见的 冒泡排序,插入排序,选择排序,归并排序,快速排序,计数排序,基数排序,桶排序, 还有不常见的猴子排序,睡眠排序,面条排序等。

其中, 冒泡排序,插入排序, 选择排序 的时间复杂度都是O(n2)O(n^2)

快排,归并排序 的时间复杂度是 O(nlogn)O(nlogn)

桶排序,计数排序,基数排序的时间复杂度是 O(n)O(n)

排序算法好坏的评估

  • 最好情况,最坏情况,平均情况的时间复杂度 我们要知道排序算法在不同数据下的性能表现。

  • 时间复杂度的系数,常数,低阶 时间复杂度反应的是数据规模n很大的时候的一个增长趋势,所以它表示的时候,会忽略系数,常数,低阶.但是我排序的时候,涉及到的数据是很小规模的,所以我们需要考虑下系数,常数,低阶。

  • 比较次数和交换(移动)次数 在基于比较的排序算法的执行过程中,最多的会涉及两种操作, 元素比较大小和元素交换或移动.

  • 内存消耗 即空间复杂度。

  • 排序算法的稳定性 稳定性是指: 如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。 这样的排序算法有什么好处呢?

    假设有这样一个需求, 对一些学生的成绩进行排序. 按照总成绩从大到小的顺序进行排列.总成绩相等的按照数学成绩从大到小的顺序进行排列。这时,我们就可以使用稳定的排序算法. 先按照数学成绩从大到小的顺序进行排列,这样保证了数学成绩是有序的,然后我们再对总成绩进行排序,这样就满足了整体需求了.

排序算法实现

交换思想排序

分治思想排序

线性排序

最后

期望与你一起遇见更好的自己

期望与你一起遇见更好的自己

配套资料 · 免费领取
本文属于「ALGO」资料包范围:算法系列合订 + 刷题清单。LeetCode 与杭电 OJ 的题解索引。
在公众号「方家小白」回复关键词 ALGO 即可领取。全文无需关注即可阅读。
ALGO