2016-02-24 3 views
-1

я пытаюсь дать ранг к данным, но результат не то, что я expected.My для {}, как показано ниже:Дайте ранги в список без сортировки в C

for(i = 0; i < 100; i++) 
{ 
    int curRank=1; 

    for (j = 0; j < i; j++) 
           // add x[i] to list, need to update the ranks. 
    { 
     if (x[i] > x[j]) 
     {      // Update rank of x[i] 
      curRank++; 
     } 
     else 
     {     // A number smaller than x[j] has appeared. Update rank of x[j] 
      rank[j]++; 
     } 
    } 

    rank[i]=curRank; 
    printf("%lf %d\n", x[i],rank[i]); 
} 

И результат получается например:

30.000000 1 
71.510000 2 
3.300000 1 
87.440000 4 
53.420000 3 
63.160000 4 
89.100000 7 
25.750000 2 
....... 

Очевидно, что это неправильно. Может ли кто-нибудь помочь мне с этим? Спасибо.

+1

Редактировать вопрос и дать минимальный понятный код здесь, чтобы другие могли просматривать и вы можете получить помощь, – MASh

+1

, что вы хотите достичь с помощью этот код? – Pooya

ответ

3

Ваш алгоритм работает, но ранжирование не является полным после того, как все значения были обработаны. Поэтому вы не можете печатать ряды по ходу дела. Вы должны напечатать ряды после того, как ваш algorihm делается в отдельном цикле:

double x[8] = {30, 71.51, 3.3, 87.44, 53.42, 63.16, 89.1, 25.75}; 
    int rank[8] = {0}; 
    int i, j; 

    for (i = 0; i < 8; i++) { 
     int curRank = 1; 

     for (j = 0; j < i; j++) { 
      if (x[i] > x[j]) { 
       curRank++; 
      } else { 
       rank[j]++; 
      } 
     } 

     rank[i] = curRank; 
    } 

    for (i = 0; i < 8; i++) { 
     printf("%lf %d\n", x[i], rank[i]); 
    } 
+0

Это работает. Спасибо огромное! – Yanyan

+0

И у меня есть дополнительный вопрос. Это два одинаковых числа, что означает, что данные имеют связи, например, 2 из 3.3. Тогда ранг этих двух 3.3 будет 1,5, как я могу с ним справиться? Я попытался добавить условие if перед else {}, но это не сработает. Спасибо. – Yanyan

+0

Я не знаю номенклатуры, которая использует рациональные числа для рангов. Текущий код присваивает 1 первому вхождению 3.3 и 2 ко второму. Это отражает тот ранг, что означает положение в отсортированном массиве. Иногда равные элементы разделяют ранг и последующие ранги, а затем оставляют пробел, например. занимает 1, 1, 3, 4, ... для массива с двумя вхождениями. С головы до ног я не знаю, как это решить. –