|
发表于 2009-11-3 02:51:29
|
显示全部楼层
IP:江苏扬州
- #include <iostream>
- using namespace std;
- void findMaxAndSubMax(int *pi, int size, int * m, int *sm)
- {
- if(size == 2)
- {
- if(pi[0]>pi[1])
- {
- *m = pi[0];
- *sm = pi[1];
- return;
- }
- *m = pi[1];
- *sm = pi[0];
- return;
- }
- else if(size == 3)
- {
- if(pi[0]>pi[1] && pi[1]>pi[2])
- {
- *m = pi[0];
- *sm = pi[1];
- return;
- }
- else if(pi[0]>pi[2] && pi[2]>pi[1])
- {
- *m = pi[0];
- *sm = pi[2];
- return;
- }
- else if(pi[1]>pi[0] && pi[0]>pi[2])
- {
- *m = pi[1];
- *sm = pi[0];
- return;
- }
- else if(pi[1]>pi[2] && pi[2]>pi[0])
- {
- *m = pi[1];
- *sm = pi[2];
- return;
- }
- else if(pi[2]>pi[0] && pi[0]>pi[1])
- {
- *m = pi[2];
- *sm = pi[0];
- return;
- }
- else if(pi[2]>pi[1] && pi[1]>pi[0])
- {
- *m = pi[2];
- *sm = pi[1];
- return;
- }
- }
- else
- {
- int * m1 = new int;
- int * sm1 = new int;
- int * m2 = new int;
- int * sm2 = new int;
- int firstHalf = size/2;
- int secondHalf = size - firstHalf;
- findMaxAndSubMax(pi, firstHalf, m1, sm1);
- findMaxAndSubMax(pi+firstHalf, secondHalf, m2, sm2);
- int temp1, temp2;
- if(*m1 > *m2)
- {
- *m = *m1;
- temp1 = *m2;
- }
- else
- {
- *m = *m2;
- temp1 = *m1;
- }
- temp2 = (*sm1>*sm2)?*sm1:*sm2;
- *sm = (temp1>temp2)?temp1:temp2;
- delete m1;
- delete m2;
- delete sm1;
- delete sm2;
- return;
- }
- }
- int main()
- {
- int nums[] = {2, 3, 12, 108, 19, 34, 6, 7, 37, 28, 65, 26, 31, 68, 20, 5, 99};
- int max, sm;
- int size = sizeof(nums) / sizeof(int);
- findMaxAndSubMax(nums, size, &max, &sm);
- cout<<max<<endl;
- cout<<sm<<endl;
- return 0;
- }
复制代码 |
|