Finding greatest element of an array
I have a 3x3 array of int's and I am working on an algorithm that will find the highest-valued element of the array and end up by assigning the relevant row and column to "rowChoice" and "colChoice", respectively. If there are two or more elements with the same value, I want my algorithm to choose randomly between them.
If I know the values are all different, I can just do something like this:
PHP Code:
// This is just a C code "fragment"...
// I'm assuming myArray[][] is an existing 3x3 array
int row=0, col=0, greatestSoFar=0, rowChoice=0, colChoice=0;
for(row=0; row<=2; row++)
{
for(col=0; col<=2; col++)
{
if(myArray[row][col]>greatestSoFar)
{
greatestSoFar=myArray[row][col];
rowChoice=row;
colChoice=col;
}
}
}
// Program continues...
Where I need help is the "choose randomly if two elements are the same" part. Any suggestions?
Thanks in advance for your help...
Andrew
(I'll be registering as soon as I get around to it... ;) )
Solved my own problem! (well, sort of...)
A little more thought led to this solution, although it's not terribly effecient, so I would still appreciate any better ideas...
(I have not tested it yet, either, so there may be a bug or two)
PHP Code:
// This is just a C code "fragment"...
int row=0, col=0, greatestValue=0, pickerFlag=0, random=0, rowChoice=0, colChoice=0;
int picker[3][3]={{0,0,0},{0,0,0},{0,0,0}};
srand(time(NULL));
for(row=0; row<=2; row++)
{
for(col=0; col<=2; col++)
{
picker[row][col]=myArray[row][col];
}
}
do
{
pickerFlag=0;
for(row=0; row<=2; row++)
{
for(col=0; col<=2; col++)
{
if(picker[row][col]>greatestValue)
{
greatestValue=picker[row][col];
rowChoice=row;
colChoice=col;
}
else if(myArray[row][col]=greatestValue
{
pickerFlag=1;
}
}
}
if(pickerFlag==1)
{
for(row=0; row<=2; row++)
{
for(col=0; col <=2, col++)
{
if(picker[row][col]==greatestValue)
{
random=rand();
picker[row][col]=random;
}
else
{
picker[row][col]=0;
}
}
}
}
} while(pickerFlag==1);
// Program continues...
Can you see what I am doing here, and, more importantly, help me improve it? Completely different ideas would be good too. Meanwhile, I'll continue building my app using the code above.
Andrew