qsort() 구조체 정렬하는 법
- 프로그래밍/C/C++
- 2018. 8. 29.
qsort() 구조체 정렬하는 법
이번에는 qsort 함수(퀵 정렬)을 구조체 정렬하는 법을 적어보겠다.
qsort 기본 사용법은 -> http://aossuper8.tistory.com/39
Quick Sort 알고리즘 구현은 -> http://aossuper8.tistory.com/74
#include <iostream>
using namespace std;
typedef struct {
char student_number[10];
char name[20];
double subject[5];
}ITEM;
int compare(const void *m, const void *n) {
return ((ITEM*)m)->subject[3] - ((ITEM*)n)->subject[3];
}
int main()
{
ITEM student[10] = { "201008101","정소희",87,98,56,0,0,
"201008102","이아름",67,77,10,0,0,
"201008103","김동현",100,98,100,0,0,
"201008104","박진영",89,90,70,0,0,
"201008105","김소연",99,88,77,0,0,
"201008106","박희동",23,60,77,0,0,
"201008107","임달자",84,98,34,0,0,
"201008108","강창후",100,82,87,0,0,
"201008109","권동수",65,77,45,0,0,
"201008110","김창민",100,90,89,0,0 };
for (int i = 0; i < 10; i++) {
student[i].subject[3] = student[i].subject[0] + student[i].subject[1] + student[i].subject[2];
student[i].subject[4] = student[i].subject[3] / 3;
}
qsort(student, 10, sizeof(student[0]), compare);
for (int i = 0; i < 10; i++)
cout << "학번 : " << student[i].student_number << " 이름 : " << student[i].name << " 총점 : " <<
student[i].subject[3] << " 평균 : " << student[i].subject[4] << endl;
return 0;
}
ITEM이라는 구조체를 만들었고 총점과 평균을 구했다.
총점을 기준으로 내림차순으로 정렬을 했기에 subject[3] 비교를 했다.
실행결과는 이러하다.
학번 : 201008102 이름 : 이아름 총점 : 154 평균 : 51.3333
학번 : 201008106 이름 : 박희동 총점 : 160 평균 : 53.3333
학번 : 201008109 이름 : 권동수 총점 : 187 평균 : 62.3333
학번 : 201008107 이름 : 임달자 총점 : 216 평균 : 72
학번 : 201008101 이름 : 정소희 총점 : 241 평균 : 80.3333
학번 : 201008104 이름 : 박진영 총점 : 249 평균 : 83
학번 : 201008105 이름 : 김소연 총점 : 264 평균 : 88
학번 : 201008108 이름 : 강창후 총점 : 269 평균 : 89.6667
학번 : 201008110 이름 : 김창민 총점 : 279 평균 : 93
학번 : 201008103 이름 : 김동현 총점 : 298 평균 : 99.3333
총점을 기준으로 내림차순으로 정렬이 되어있다.