数据结构与算法简记--排序算法(3) -排序优化

如何选择排序

  • 小规模用插入排序
  • 大规模用快速排序
  • 通用用快速排序
  • 特殊场景用桶排序、计数排序、基数排序

为什么用快速排序不用归并排序

  • 归并排序虽然在最坏情况下时间复杂度为O(nlogn),比快速排序好,但不是原地排序,空间复杂度过高,意味着耗费较多内存
  • 快速排序在最坏情况下时间复杂度为O(n2),可以通过优化来避免复杂度恶化:

优化快速排序主要在于合理分区

  • 三数取中,五数取中
  • 随机数

通用排序

  • glibc.qsort

空间换时间:qsort() 会优先使用归并排序来排序输入数据

数据规模较大时:使用快速排序,三数取中法分区

O(n2) 不一定比 O(nlogn) 差:元素小于4时,使用插入排序

  • java1.8中的排序

在元素小于47的时候用插入排序

大于47小于286用双轴快排

大于286用timsort归并排序,并在timesort中记录数据的连续的有序段的的位置,

若有序段太多,也就是说数据近乎乱序,则用双轴快排

当然快排的递归调用的过程中,若排序的子数组数据数量小,用插入排序

原文地址:https://www.cnblogs.com/wod-Y/p/11968922.html