数据结构与算法-学习笔记(十)

排序比较

优化快速排序

  1. 快速排序的最坏时间复杂度是O(n2);缘由是数据是有序或接近有序的,而每次区分点都选最后一个,则须要交换次数太多,时间复杂度就会退化到O(n2)。 所以这种时间复杂度出现的主要缘由仍是分区点选的不够合理。 比较经常使用简单的分区算法:1.三数取中法;2.随机发
  2. 快速排序使用递归实现的,就可能出现栈溢出的问题。解决办法:1.限制递归深度;2.经过在堆上模拟实现一个函数调用栈,手动模拟递归压栈、出栈的过程,这样就没有了系统栈大小的限制。

排序函数

C中qsort()函数的实现: qsort优先使用归并排序,若是数据量过大的话,再使用快速排序;算法

快排的分区点的选择是“三数取中法”;函数

对于递归太深致使栈溢出的问题,qsort是经过本身实现一个堆上的栈,手动模拟的。优化

在递归的过程当中,当要排序的数据区间中,元素个数<=4时,退化为插入排序,再也不用递归(在小规模数据的状况下,O(n2)和O(nlogn)就差很少了)。cdn

所以实际的排序函数,具体状况具体分析。blog

相关文章
相关标签/搜索