// std::sort 学习:一种递归分治方法
今天看了看 stl 的 std::sort 的代码,众所周知,这个函数是在快速排序递归太深的时候使用堆排序防止过度退化,但是今天说的不是这个。我们只看快速排序的部分。
我们一般实现快速排序大概是这样的(本王随意写了个用下标当参数的排序函数,领会意思即可)。
- void quick_sort(int first, int last) // 某个数组的 [first, last)
- {
- if ((last - first) > 1) {
- int middle = divide(first, last); // 划分
- quick_sort(first, middle);
- quick_sort(middle, last);
- }
- }
但是 stl 里面的代码不是这个形式,它大概是这个样子。
- void quick_sort(int first, int last)
- {
- for (; (last - first) > 1; ) {
- int middle = divide(first, last);
- quick_sort(first, middle);
- first = middle;
- }
- }
很容易发现,这个写法跟前面的写法执行的过程是完全一样的,但是函数调用减少了一半,节省了开销。
时间: 2024-10-05 16:53:20