9种基本算法_分治

来源:互联网 发布:淘宝做什么产品 编辑:程序博客网 时间:2024/05/22 04:34

分治思想:把一个大问题分解为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);    }}



0 0
原创粉丝点击