茶艺师学算法打卡6:排序(上)
前言
排序算法是计算机科学中的重要主题,用于将一组元素按照特定的顺序进行排列。排序算法可以应用于各种场景,例如数据分析、搜索和数据库操作等。
就像 go 语言的给整数序列排序语句 sort.Ints(),当执行到这句时,其背后发生了什么?
学习笔记
- 如何评价一个排序算法?
- 从执行效率来看:时间复杂度(最好、最坏、平均,系数常数和低阶)、(基于比较的排序算法)比较次数与交换次数
- 从内存消耗来看:是否为原地排序算法(空间复杂度为的排序算法)
- 从稳定性来看:其中值相同的元素会不会前后对调?
- 有序度、满有序度、逆序度
有序度就是指一个序列中有序(默认从小到大)的元素对的数量,那么该序列(设序列元素数量 n )排完序后的有序度自然就是满有序度,那么逆序度就是满有序度 - 有序度。逆序度可以认为是这个序列排序所需要的交换元素的次数。 - 适合小数据规模:冒泡排序、插入排序、选择排序
算法名 是否原地 是否稳定 时间复杂度 冒泡排序 是 是 最好 最坏 平均 插入排序 是 是 最好 最坏 平均 选择排序 是 否 最好 最坏 平均 - 适合大数据规模:归并排序、快速排序
算法名 是否原地 是否稳定 时间复杂度 归并排序 不是 是 快速排序 是 不是
结语
排序算法有着各自的性能,当在选择时,还需要结合具体的使用场景。