【编程之美-扩展】找出N个数中的第二大数

来源:互联网 发布:手机截图编辑软件 编辑:程序博客网 时间:2024/06/03 11:06

采用分治法思想,分别找出每个小组的最大值和次大值,在进行比较。但是当遇到一个小组中只有一个数的情况处理起来比较复杂。

因此,对于数组长度为奇数的情况分开考虑,保留最后一位数,单独比较

#include <iostream>using namespace std;void finMax_Max2(int* arr ,int begin ,int end, int &Max ,int &Max2){if(end-begin<1){exit(1);}bool flag = false;int last;if((end - begin +1)%2 == 1){flag = true;last = arr[end];end--;}if(begin +1 == end){if(arr[begin] > arr[end]){Max = arr[begin];Max2 = arr[end];}else{Max2 = arr[begin];Max = arr[end];}}else{int leftMax,leftMax2,rightMax,rightMax2;int mid = begin +( end -begin )/2;finMax_Max2( arr ,begin ,mid, leftMax ,leftMax2);finMax_Max2( arr ,mid+1 ,end, rightMax ,rightMax2);if(leftMax>rightMax){Max = leftMax;if(leftMax2>rightMax)Max2 = leftMax2;elseMax2 = rightMax;}else{Max =rightMax;if(rightMax2>leftMax)Max2 = rightMax2;elseMax2 = leftMax;}}if(flag){if(last>Max){Max2 = Max;Max = last;}else if(last>Max2 ){Max2 = last;}}}void main(){int a[7]={1,2,1213,24};int max,max2;finMax_Max2(a,0,3,max,max2);cout<< max2;system("pause");}


0 0