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

分治法

时间:2015-07-28 10:15:55      阅读:107      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!