茶艺师学算法打卡6:排序(上)

89 阅读2分钟

茶艺师学算法打卡6:排序(上)

前言

排序算法是计算机科学中的重要主题,用于将一组元素按照特定的顺序进行排列。排序算法可以应用于各种场景,例如数据分析、搜索和数据库操作等。
就像 go 语言的给整数序列排序语句 sort.Ints(),当执行到这句时,其背后发生了什么?

学习笔记

  1. 如何评价一个排序算法?
    • 从执行效率来看:时间复杂度(最好、最坏、平均,系数常数和低阶)、(基于比较的排序算法)比较次数与交换次数
    • 从内存消耗来看:是否为原地排序算法(空间复杂度为O(1)O(1)的排序算法)
    • 从稳定性来看:其中值相同的元素会不会前后对调?
  2. 有序度、满有序度、逆序度
    有序度就是指一个序列中有序(默认从小到大)的元素对的数量,那么该序列(设序列元素数量 n )排完序后的有序度自然就是满有序度n(n1)2\frac{n * (n - 1)}{2},那么逆序度就是满有序度 - 有序度。逆序度可以认为是这个序列排序所需要的交换元素的次数。
  3. 适合小数据规模:冒泡排序、插入排序、选择排序
    算法名是否原地是否稳定时间复杂度
    冒泡排序最好O(n)O(n) 最坏O(n2)O(n^2) 平均O(n2)O(n^2)
    插入排序最好O(n)O(n) 最坏O(n2)O(n^2) 平均O(n2)O(n^2)
    选择排序最好O(n2)O(n^2) 最坏O(n2)O(n^2) 平均O(n2)O(n^2)
  4. 适合大数据规模:归并排序、快速排序
    算法名是否原地是否稳定时间复杂度
    归并排序不是O(nlogn)O(nlogn)
    快速排序不是O(nlogn)O(nlogn)

结语

排序算法有着各自的性能,当在选择时,还需要结合具体的使用场景。