算法来源:MIT 算法导论(CLRS)
将数组元素一对一对的比较,较小的与最小值比较如果更小则更新最小值;较大的与最大值比较,若更大则更新最大值。这样,最多比较 3n/2 次就能找出最小值和最大值。
#include <iostream>
using namespace std;
int main()
{
int nArr[1024], nLength, nMin, nMax;
cin>>nLength;
for (int i=0; i<nLength; i++) cin>>nArr[i];
nMin=nArr[0];
nMax=nArr[0];
for (int i=nLength&1; i<nLength; i+=2)
{
if (nArr[i]<nArr[i+1])
{
nMin=nMin<nArr[i] ? nMin : nArr[i];
nMax=nMax>nArr[i+1] ? nMax : nArr[i+1];
}
else
{
nMin=nMin<nArr[i+1] ? nMin : nArr[i+1];
nMax=nMax>nArr[i] ? nMax : nArr[i];
}
}
cout<<nMin<<' '<<nMax<<endl;
return 0;
}