소스에 struct 문이 들어가서 조금 생소한 분들은 랭크 소트와 struct 문을 같이 이해해 보세요. struct 문 이해하는데에도 좋은 예 인것 같습니다.
점수가 다음과 같을 때 등수를 부여하려고 한다. 같은 점수에 대해서는 같은 등수를 부여하고 다음 등수는 결번 처리하여야 한다.
점수(tot) 등수(rank) 70 80 90 80 60 75 rank 소트한 결과는
점수(tot) 등수(rank) 70 5 80 2 90 1 80 2 60 6 75 4
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; }
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