辉仔 の专栏

sharing changes the world

DC分治法求数组最大最小值

#include<iostream>

void dcMaxMin( int [], int, int, int *, int * );

void dcMaxMin( int arr[], int low, int high, int *tmpMax, int *tmpMin )
{
        if ( high - low <= 1)// 最多俩元素
        {
                if (arr[low] <= arr[high] )
                {
                        *tmpMax = arr[high];
                        *tmpMin = arr[low];
                        return; // 递归出口
                }
                else
                {
                        *tmpMax = arr[low];
                        *tmpMin = arr[high];
                        return; //递归出口
                }
        }

        int min1, min2, max1, max2;
        int mid = ( high - low ) / 2 + low;
        //递归开始
        dcMaxMin(arr, low, mid, &max1, &min1);
        dcMaxMin(arr, mid+1, high, &max2, &min2);

        *tmpMax = max1 < max2 ? max2 : max1;
        *tmpMin = min1 < min2 ? min1 : min2;

}

int main()
{
        int arr[] = {4, 1, 2, 9, 8, 3};
        int len = sizeof ( arr ) / sizeof( int );
        int max, min;
        max = arr[0];
        min = arr[0];
        dcMaxMin(arr, 0, len, &max, &min);
        std::cout << max << "\t" << min << std::endl;

        return 0;
}

阅读更多
想对作者说点什么? 我来说一句

分治法求最大值和最小值

2013年11月26日 65KB 下载

分治法求最值

2016年01月10日 599B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭