Go Down

Topic: Sorting an array (Read 1 time) previous topic - next topic


I've just come up with an own bubble sort function which sorts different numbers in a passed array in descending order and the function looks like this:
Code: [Select]
long bubbleSort(long sortedData[arraySize]) {

  long unsortedData[arraySize];
     for (int i = 0; i < arraySize-1; i++) {
    for (int c = 0; c + i <= arraySize-1; c++)
   if(sortedData[i+c] < sortedData[i])
     unsortedData[i] = sortedData[i+c];
    unsortedData[i+c] = sortedData[i];
   sortedData[i] = unsortedData[i];
  sortedData[i+c] = unsortedData[i+c];


return (sortedData[(arraySize/2)-1]+sortedData[arraySize/2])/2;

The code nicely sort the data and then in this case returns the average values of the two middle values but that doesn't really matter here.
WHAT I need help with is to identify what original place the biggest number had in the beginning.
Let me give you an example,
If i send this array,
long OriginalArray[arraySize];
OriginalArray[0] = 111;
OriginalArray[1] = 51;
OriginalArray[2] = 400;
OriginalArray[3] = 3;

I want the function to first sort the numbers like this(which it already does):

And then tell me that the biggest number had slot number 2 in the original array.
Is there a way to easily implement this into my bubblesort function.
Thank you very much!


Just do a scan before the bubble sort in the same function. A single for loop that keeps track of the highest number and it's index would suffice.


something like this
Code: [Select]

int findPositionLargest(long data[], int arraySize)
 int pos = 0;
 long largest = data[0];
 for (int i=0; i<arraySize; i++)
   if (largest < data[i])
     largest = data[i];
     pos = i;
 return pos;
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131