您的位置:首页 > 其它

9种基本算法_分治

2014-10-21 15:13 190 查看
分治思想:把一个大问题分解为n个子问题,这些子问题与原问题性质相同,只要求出子问题就可以求出原问题。往往

采用二分法

分治步骤:1、分解

                  2、求解

                  3、合并

分治问题特征:1、当问题小到一定程度就可以容易的解决

                         2、问题可以分解为若干个较小的相同问题

                         3、分解出的子问题可以合并为问题的解

                         4、该问题分解出的子问题是相互独立的

                         5、分治往往采用了递归,往往采用了2个递归才叫分治

实例:归并排序

void merge(int array[],int low,int mid,int high){
int nLeft = mid - low + 1;
int nRight = high - mid;
int left[nLeft] ;
int right[nRight];
//左数组赋值
for (int i = 0; i < nLeft; i++) {
left[i] = array[low + i];
}
//右数组赋值
for (int i = 0; i < nRight; i++) {
right[i] = array[mid + 1 + i];
}

int index = low,i = 0,j = 0;
for(;i < nLeft && j < nRight;){
if(left[i] <= right[j]){
array[index++] = left[i++];
}else{
array[index++] = right[j++];
}
}

//剩余元素赋值
for(; i < nLeft; i++)
array[index++] = left[i];

for(; j < nRight; j++)
array[index++] = right[j];
}

void mergeSort(int array[],int low,int high)
{
if (low < high) {
int mid = (low + high) / 2;
mergeSort(array, low, mid);
mergeSort(array, mid + 1, high);
merge(array, low, mid, high);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: