输入n个数,求出该序列的最大和最小值。

参考:

http://blog.csdn.net/kennyrose/article/details/7376457

http://www.360doc.com/content/12/0903/10/1317564_233893635.shtml

http://www.cnblogs.com/goodwin/archive/2010/11/01/1866391.html

 http://blog.csdn.net/yyywyr/article/details/8003366

 

分治算法通俗的讲就是把一个规模比较大的问题分成n个规模较小的问题来解决,再将每个小规模的问题进行合并,最后得到结果。通常问题规模比较大难以用普通的编程方法实现,或者不可能实现的时候采用分治算法,能够简化问题的解决。

一个例子:

求出一个数组中的最大值和最小值。

 

写的比较好的代码:

 1 #include<iostream>
 2 
 3 void dcMaxMin( int [], int, int, int *, int * );
 4 
 5 void dcMaxMin( int arr[], int low, int high, int *tmpMax, int *tmpMin )
 6 {
 7         if ( high - low <= 1)// 最多俩元素
 8         {
 9                 if (arr[low] <= arr[high] )
10                 {
11                         *tmpMax = arr[high];
12                         *tmpMin = arr[low];
13                         return; // 递归出口
14                 }
15                 else
16                 {
17                         *tmpMax = arr[low];
18                         *tmpMin = arr[high];
19                         return; //递归出口
20                 }
21         }
22 
23         int min1, min2, max1, max2;
24         int mid = ( high - low ) / 2 + low;
25         //递归开始
26         dcMaxMin(arr, low, mid, &max1, &min1);
27         dcMaxMin(arr, mid+1, high, &max2, &min2);
28 
29         *tmpMax = max1 < max2 ? max2 : max1;
30         *tmpMin = min1 < min2 ? min1 : min2;
31 
32 }
33 
34 int main()
35 {
36         int arr[] = {4, 1, 2, 9, 8, 3};
37         int len = sizeof ( arr ) / sizeof( int );
38         int max, min;
39         max = arr[0];
40         min = arr[0];
41         dcMaxMin(arr, 0, len-1, &max, &min);
42         std::cout << max << "\t" << min << std::endl;
43 
44         return 0;
45 }
View Code

相关文章: