Reputation:
I am in need to identify the greatest three elements from n numbers without using array, list like structure and I should not use any sorting logic.I done it something like this in C program. Is there any way to do it more efficiently?.
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int number;
scanf("%d",&number);
int firstMax, secondMax, thirdMax;
firstMax = secondMax = thirdMax =number;
for(int i = 1; i<n ; i++){
scanf("%d",&number);
if(number > firstMax){
thirdMax = secondMax;
secondMax = firstMax;
firstMax = number;
}
else if(number > secondMax){
thirdMax = secondMax;
secondMax = number;
}
else if(number > thirdMax){
thirdMax = number;
}
}
printf("%d %d %d",firstMax, secondMax, thirdMax);
return 0;
}
Upvotes: 0
Views: 748
Reputation: 1486
you can start with comparing with thirdMax
. If this is false, all others need not to be considered.
if (number > thirdMax)
{
if (number > secondMax)
{
thirdMax = secondMax;
if (number > firstMax )
{
secondMax = firstMax;
firstMax = number;
}
else
{
secondMax = number;
}
}
else
{
thirdMax = number;
}
}
Upvotes: 2