输入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 }