C++从一群数据中选取最小的"两个"数,最快的方法!

如题所述

第1个回答  2010-11-19
把数据存放在一个数组arr里
声明一个新变量temp,并保存数组第一个值
遍历数组,把temp的值和数组的每个值比较
如果数组中数据比temp小,则交换
反之,继续比下去。
最后temp中存放的值便是最小的。

如果C++里没有已经写好的方法,这个方法还是比较快的。不知道有没有更快的呢。
第2个回答  2010-11-19
vc6通过调试运行了
#include<iostream>
using namespace std;
void main ()
{
int arr[] ={1,564,234,657,18,565,89,435};
int num1 = *arr<=*(arr+1)?*arr:*(arr+1);
int num2 = *arr<=*(arr+1)?*(arr+1):*arr;
int i;
for(i=2;i<sizeof(arr)/4;i++)
{
if(*(arr+i)<num1)
{
num2=num1;
num1=*(arr+i);
continue;
}
if(*(arr+i)<num2)
{
num2=*(arr+i);
continue;
}
}
cout<<"最小的2个数是:"<<num1<<" 和 "<<num2<<endl;
}
还有一种方法
#include<iostream>
using namespace std;
void main ()
{
int arr[] ={1,564,234,657,18,565,89,435};
int num1 = *arr<=*(arr+1)?*arr:*(arr+1);
int num2 = *arr<=*(arr+1)?*(arr+1):*arr;
int i;
for(i=2;i<sizeof(arr)/4;i++)
{
switch((num1>=*(arr+i)?1:0)+(num2>*(arr+i)?1:0))
{
case 2:
{
num2=num1;
num1=*(arr+i);
}
break;
case 1:
num2=*(arr+i);
break;
default:break;
}
}
cout<<"最小的2个数是:"<<num1<<" 和 "<<num2<<endl;
}
也可以,而且应该比前者稍微快些,不过几乎可以忽略不计了本回答被提问者和网友采纳
第3个回答  2010-11-19
#include<iostream>
using namespace std;
void main (void)
{
int iArr[] ={1,43,1,5,23,7,32,8,32,9,3,5,8,4,4,3,0,3,5,1,0,3,3};
int iNumA = 0;
int iNumB = 0;
int iMixA = iArr[iNumA];
int iMixB = iArr[iNumB];
for (int i = 0; i < sizeof(iArr)/4; i++)
{
if (iMixA > iArr[i])
{
iMixA = iArr[i];
iNumA = i;
}
}
for (int i = 0; i < sizeof(iArr)/4; i++)
{
if ((iMixB > iArr[i])&&(iNumA != iNumB))
{
iMixB = iArr[i];
iNumB = i;
}
}
cout<<"最小的两个数是:"<<iMixA<<"和"<<iMixB<<endl;
system("pause");
}
相似回答