码迷,mamicode.com
首页 > 其他好文 > 详细

std::sort 学习:一种递归分治方法

时间:2016-05-31 00:39:47      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

// std::sort 学习:一种递归分治方法

今天看了看 stl 的 std::sort 的代码,众所周知,这个函数是在快速排序递归太深的时候使用堆排序防止过度退化,但是今天说的不是这个。我们只看快速排序的部分。

我们一般实现快速排序大概是这样的(本王随意写了个用下标当参数的排序函数,领会意思即可)。

  1. void quick_sort(int first, int last) // 某个数组的 [first, last) 

  2. if ((last - first) > 1) { 
  3. int middle = divide(first, last); // 划分 
  4. quick_sort(first, middle); 
  5. quick_sort(middle, last); 


但是 stl 里面的代码不是这个形式,它大概是这个样子。

  1. void quick_sort(int first, int last) 

  2. for (; (last - first) > 1; ) { 
  3. int middle = divide(first, last); 
  4. quick_sort(first, middle); 
  5. first = middle; 


很容易发现,这个写法跟前面的写法执行的过程是完全一样的,但是函数调用减少了一半,节省了开销。

std::sort 学习:一种递归分治方法

标签:

原文地址:http://www.cnblogs.com/gu-castle/p/5544257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!