Well I tried to look for any posts on ranking arrays, but all I ever really got were stuff about Google's ranking system. Anyway, I have two arrays. One is arr[] which is the original array, and rank[] is the indexing array. So if I were to print arr[rank[0]], it would give me the smallest value of arr[]. Without further ado, here is the code!

#include <stdio.h>

int main(void)
  // Local Declarations
  int arr[5]={2,9,5,1,3};
  int rank[5]={0,1,2,3,4};
  int i; int j;
  int smallest;
  int temp;

  // Statements

      smallest = i;
	if(arr[rank[smallest]] > arr[rank[j]])
          smallest = j;

      temp = rank[i];
      rank[i] = smallest;
      rank[smallest] = temp;
        printf("%3d", rank[i]);
    printf("%3d", arr[i]);

  return 0;
} // main

/* Execution Results

  3  1  2  0  4
  2  9  5  1  3

For some reason, the for loop for the ranking sort just goes through only once. Otherwise it would print the ranking array 3 more times I believe. Any help would be greatly appreciated. Thanks in advance!

8 Years
Discussion Span
Last Post by RaDeuX

Using more { } to denote exactly which bits of code belong to which block would certainly help clarify the problem.


very simple: you are using ' i ' in two nested loops and every time you enter a loop i becomes 0 (lines 14 and 25)


Okay, I fixed line 25 to loop with k instead of i. Now I'm getting 3 more arrays printed out, although not in the correct order.

3 1 2 0 4 //this one is correct

3 3 2 1 4 //but not this one... the second 3 should be a 0 instead...

3 3 4 1 2

3 3 4 4 1
2 9 5 1 3 //original array


The array rank[] is supposed to be an indexing array that sorts the arr[] from low to high. For example, arr[rank[0]] would give me the lowest value, which in this case would be 1. arr[rank[1]] would give me the second lowest number which is 2.


Hmm, sounds a bit strange to me. How about using a simple bubblesort on the original array? That way arr[0] would be smallest and arr[4] will be biggest. No need for an extra array right?


Okay, I got it. The reason why was because "smallest" in line 22 wasn't an array address. When I changed it to rank[smallest] it worked just fine. Thank you for your help guys, I really appreciate it! Now I can go to sleep...


Well that sort of defeats the purpose of a ranking sort. It's used so that the original array's order is not tampered with so it could still be used as a reference for something. Thanks for your input though.

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.