解法四: 利用分治法求解,复杂度O(1.5N) /* * Copyright (c) 2011 alexingcool. All Rights Reserved. */ #include <iostream> using namespace std; #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b)) int array[] = {2, 9, 7, 5, 4, 10, 20, 11, 18, 1, 8}; const int size = sizeof array / sizeof *array; void FindMinMax(int (&array)[size], int left, int right, int &minV, int &maxV) { if(right - left <= 1) { if(array[left] > array[right]) { maxV = array[left]; minV = array[right]; } else { maxV = array[right]; minV = array[left]; } return; } int minL, maxL, minR, maxR; FindMinMax(array, left, left + (right - left) / 2, minL, maxL); FindMinMax(array, left + (right - left) / 2 + 1, right, minR, maxR); minV = MIN(minL, minR); maxV = MAX(maxL, maxR); return; } void main() { int minValue, maxValue; FindMinMax(array, 0, size - 1, minValue, maxValue); cout << "min value: " << minValue << endl; cout << "max value: " << maxValue << endl; }