소스에 struct 문이 들어가서 조금 생소한 분들은 랭크 소트와 struct 문을 같이 이해해 보세요. struct 문 이해하는데에도 좋은 예 인것 같습니다.

rank 소트

점수가 다음과 같을 때 등수를 부여하려고 한다. 같은 점수에 대해서는 같은 등수를 부여하고 다음 등수는 결번 처리하여야 한다.

점수(tot) 등수(rank)
70
80
90
80
60
75

rank 소트한 결과는

점수(tot) 등수(rank)
70 5
80 2
90 1
80 2
60 6
75 4

방법 1

i 번째 사람의 등수를 정할 때 , 
i 번째 사람의 tot 와  전체의 tot (제어변수 j)와 비교해서 i 번째 사람의 tot 가 더 작으면
i 번째 사람의 등수를 1 증가하는 하면 i 번째 사람의 등수가 구해진다. 
i 는 1 부터 끝까지 변화한다.

소스---

#include < stdio.h >

struct s
{
   int tot;
   int rank;
};

int main()
{
   struct s stud[]={ {70,},{80,},{90,},{80,},{60,},{75,}};
   int i,j;

   for(i=0;i<6;i++){
      stud[i].rank=1;
      for(j=0;j<6;j++){
         if (stud[i].tot < stud[j].tot) stud[i].rank++;
      }
   }

   for(i=0;i<6;i++){
      printf("%d %d\n",stud[i].tot,stud[i].rank);
   }

   return 0;
}

방법2

i 번째 사람의 등수를 정할 때 비교대상이 되는 범위는 j 는 i+1 번째 부터 끝까지이다.

비교시 i 번째 tot 를 전체 tot 에 영향을 미치는 방법이다. i 번째 사람의 점수와 j 번째 사람의 점수를 비교해서 i 번째 사람의 점수가 작으면 i 번째 등수를 1 증가하고 , i 번째 사람의 등수가 더 크면 j 번째의 등수를 1 증가하는 방법이다.

소스---

#include < stdio.h >

struct s
{
   int tot;
   int rank;
};

int main()
{
   struct s stud[]={ {70,1},{80,1},{90,1},{80,1},{60,1},{75,1}};
   int i,j;

   for(i=0;i<6;i++){
      for(j = i+1 ;j<6;j++){
         if (stud[i].tot < stud[j].tot) stud[i].rank++;
           else if (stud[i].tot > stud[j].tot) stud[j].rank++;
      }
   }

   for(i=0;i<6;i++){
      printf("%d %d\n",stud[i].tot,stud[i].rank);
   }
     
   return 0;
}
출처:dovelet

[질/답]
[홈으로]  [뒤 로]
[푼 후(0)]