CodeSarang.Com
Home | All categories Join | Login | 검색   

 

구조체 정렬 (struct, qsort)

등록자 : cpueblo (유광희), 2008-10-17
글수정 | 글삭제


Intro

안녕하세요. cpueblo 입니다 ^^
qsort 를 이용한 구조체 정렬 방법을 소개합니다

qsort()

stdlib.h 이나 search.h 에 선언된 함수로 빠른 정렬을 제공합니다.
함수의 인자 형태는 void * 형태로 어떤 데이터 형이든 정렬을 가능하게 합니다.

void qsort( void *base, // 정렬할 데이터 size_t num, // 인자 개수 size_t width, // 인자 크기 int (__cdecl *compare )(const void *, const void *) // 콜백 함수 );

소스

// 간단한 구조체를 선언합니다 typedef struct _MYSTRUCT { char *Name; int Age; } MYSTRUCT; // 이름 정렬시 호출될 함수 int MyArrayNameCompare( const void *ItemPtr1, const void *ItemPtr2) { MYSTRUCT *Item1 = (MYSTRUCT *)ItemPtr1; MYSTRUCT *Item2 = (MYSTRUCT *)ItemPtr2; return strcmp(Item1->Name, Item2->Name); } // 이름(역순) 정렬시 호출될 함수 int MyArrayNameCompareDesc( const void *ItemPtr1, const void *ItemPtr2) { MYSTRUCT *Item1 = (MYSTRUCT *)ItemPtr1; MYSTRUCT *Item2 = (MYSTRUCT *)ItemPtr2; return !strcmp(Item1->Name, Item2->Name); } // 나이 정렬시 호출된 함수 int MyArrayAgeCompare( const void *ItemPtr1, const void *ItemPtr2) { MYSTRUCT *Item1 = (MYSTRUCT *)ItemPtr1; MYSTRUCT *Item2 = (MYSTRUCT *)ItemPtr2; return Item1->Age > Item2->Age; } // 나이(역순) 정렬시 호출될 함수 int MyArrayAgeCompareDesc( const void *ItemPtr1, const void *ItemPtr2) { MYSTRUCT *Item1 = (MYSTRUCT *)ItemPtr1; MYSTRUCT *Item2 = (MYSTRUCT *)ItemPtr2; return Item1->Age < Item2->Age; } int _tmain(int argc, _TCHAR* argv[]) { // 간단한 3개의 구조체 배열을 생성합니다 MYSTRUCT Array[3]; Array[0].Name = "갑돌이"; Array[0].Age = 50; Array[1].Name = "순이"; Array[1].Age = 10; Array[2].Name = "유광희"; Array[2].Age = 29; // 배열의 개수 구하기 int ArrayCount = sizeof(Array) / sizeof(Array[0]); // // 이름으로 정렬 // qsort( (void *)&Array, ArrayCount, sizeof(MYSTRUCT), MyArrayNameCompare ); printf ("[ 이름 정렬 ]\n"); for(int i = 0; i < ArrayCount; i++ ) printf("Name = %-10s, Age = %d\n", Array[i].Name, Array[i].Age); // // 이름으로 정렬 (역순) // qsort( (void *)&Array, ArrayCount, sizeof(MYSTRUCT), MyArrayNameCompareDesc ); printf ("[ 이름 정렬 (역순) ]\n"); for(int i = 0; i < ArrayCount; i++ ) printf("Name = %-10s, Age = %d\n", Array[i].Name, Array[i].Age); // // 나이로 정렬 // qsort( (void *)&Array, ArrayCount, sizeof(MYSTRUCT), MyArrayAgeCompare ); printf ("[ 나이로 정렬 ]\n"); for(int i = 0; i < ArrayCount; i++ ) printf("Name = %-10s, Age = %d\n", Array[i].Name, Array[i].Age); // // 나이로 정렬 (역순) // qsort( (void *)&Array, ArrayCount, sizeof(MYSTRUCT), MyArrayAgeCompareDesc ); printf ("[ 나이로 정렬 (역순) ]\n"); for(int i = 0; i < ArrayCount; i++ ) printf("Name = %-10s, Age = %d\n", Array[i].Name, Array[i].Age); return 0; }

Output

[ 이름 정렬 ] Name = 갑돌이 , Age = 50 Name = 순이 , Age = 10 Name = 유광희 , Age = 29 [ 이름 정렬 (역순) ] Name = 순이 , Age = 10 Name = 유광희 , Age = 29 Name = 갑돌이 , Age = 50 [ 나이로 정렬 ] Name = 순이 , Age = 10 Name = 유광희 , Age = 29 Name = 갑돌이 , Age = 50 [ 나이로 정렬 (역순) ] Name = 갑돌이 , Age = 50 Name = 유광희 , Age = 29 Name = 순이 , Age = 10

Keywords

구조체 정렬
struct sort
구조체를 qsort 함수에 넘기는 방법
qsort 함수로 구조체 정렬하기
qsort() to sort an array of structures
qsort 함수로 구조체의 멤버를 정렬할때




글수정 | 글삭제
http://codesarang.com. mail to cpueblocpueblo.com