前面几篇博客分别罗列和总结了近期学习的几种排序算法,今天总结一下。
排序算法有很多,在实际使用的时候需要根据情况选择合适的相应算法。每种算法都有其优缺点,判断一个算法的优劣,可以参考的标准:
- 计算的复杂度:依据排序数据量的大小(n),好的表现是O(nlogn),最差表现为O(n2)
- 系统资源的使用:包括计算机内存以及其他资源的使用,主要考虑计算机辅助内存的多少
- 稳定度
几种算法的复杂度:
- 冒泡排序法:平均速度和最坏情况下的速度都为O(n2)
- 快速排序法:平均速度为O(nlogn),比冒泡排序法快,单在最坏的情况下与冒泡排序法相同,为O(n2)
- 简单选择排序法,平均速度和最坏情况下的速度都为O(n2)
- 堆排序法:平均速度和最坏情况下的速度都为O(nlogn)
- 希尔排序法:平均速度为O(n3/2),最坏情况下速度为O(n2)
- 合并排序法:平均速度和最坏情况下的速度都为O(nlogn)
几种算法的稳定度:
- 稳定的算法:
- 冒泡排序法
- 插入排序法
- 合并排序法
- 不稳定的算法:.
- 选择排序法
- 希尔排序法
- 堆排序法
- 快速排序法
选择排序算法的几个参考:
- 当数据为正序时,使用直接插入排序法、冒泡排序法和快速排序法
- 当n值比较小(如n<=50),可采用直接插入排序法或选择排序法。当记录规模比较小时直接插入排序较好;否则因为直接选择移动的记录数多于直接插入,应选择直接选择排序
- 当n值比较大时,则应采用时间复杂度为O(nlogn)的排序算法,如快速排序、堆排序或合并排序
- 当待排序的关键字是随机分布时,快速排序的平均时间最短
- 若要求排序稳定,则可选择合并排序