首页 > 其他 > 详细

分治法

时间:2015-07-28 10:13:28      阅读:277      评论:0      收藏:0      [点我收藏+]

核心数学式:f(n) = F + f([0,n/2]) + f([n/2,n])

思路:

  1. 进行相应处理(打印结点、选好哨兵),将整个集合一分为二(一般是分为两部分)
  2. 分别迭代处理两个半集合    

例子:快排、二叉树遍历、最近点对、大整数乘法

/*
 * 快排
 *
 */

#include <iostream>

template <class T>
void qQsort(const T[] array, int start, int end) {
    if (end - start > 5) {
        int median = (start + end) / 2;
        swap(array, start, median);

        int i = start, j = end;
        T pivot = array[start];
        while(j > i && array[j] > pivot)    j--;
        while(i < j && array[i] < pivot)    i++;
        if(i < j)       swap(array, i, j);

        qQsort(array, start, median-1);
        qQsort(array, median+1, end);
    } else {
        /* 数量少时用插入排序效果更好 */
    }
}

 

分治法

原文:http://www.cnblogs.com/johnchow/p/4681921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!