rank排序算法實現的問題

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
void rank(T a[], int n, int r[])
{ 
    for (int i = 0; i < n; i++){
          r[i] = 0;  
   
      for (int i = 1; i < n; i++)
          for (int j = 0; j < i; j++)
                       if (a[j] <= a[i]) r[i]++;
                      else r[j]++;    
}

int main()
{
   int a[5] = {4, 3, 9, 3, 7};;
   int r[5];

   cout << "a[0:4] = ";
   copy(a, a+5, ostream_iterator<int>(cout, " "));
   cout << endl;

   rank(a,5,r);

   cout << "r[0:4] = ";
   copy(r, r+5, ostream_iterator<int>(cout, " "));
   cout << endl;
   return 0;
}
运行结果

運行結果:a[0:4] = 4 3 9 3 7
r[0:4] = 10 0 12 2 3

按書上説的,運行結果這麽是對的:a[0:4] = 4 3 9 3 7
r[0:4] = 2 0 4 1 3
請教到底是算法哪裏不對?

img