qsort 함수

void qsort(void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *)); 정렬

입력 매개 변수 리스트

base 정렬할 원소들이 있는 메모리 주소

nmemb 정렬할 원소 개수

size 원소 하나의 크기

compare 비교 알고리즘

반환 값

없음

qsort 함수는 배열을 정렬하는 함수입니다. 마지막 인자로 비교 알고리즘을 받습니다. 비교 알고리즘은 호출하는 곳에서 함수로 정의하여 전달합니다. 비교 알고리즘을 정의한 함수에서는 앞쪽이 크면 양수, 같으면 0, 뒤쪽이 크면 음수를 반환하게 정의합니다.

사용 예

//C언어 표준 라이브러리 함수 가이드
//void qsort (void* base,size_t n, size_t size,  int (*compare)(const void*,const void*)); 정렬 함수
//회원 배열을 번호 순으로 정렬, 이름 순으로 정렬

#include <stdlib.h>
#include <string.h>
#include <stdio.h> 

typedef struct{//회원 구조체 정의
   int num;
   char name[20];
}Member;

typedef int (*compare)(const void*,const void*);//비교 알고리즘 함수 포인터를 compare 이름으로 타입명 정의

int CompareByNum(const void *v1, const void *v2)//회원 번호로 비교 함수
{
   const Member *m1 = (const Member *)v1;
   const Member *m2 = (const Member *)v2;
   return m1->num - m2->num;
}

int CompareByName(const void *v1, const void *v2)//회원 이름으로 비교 함수
{
   const Member *m1 = (const Member *)v1;
   const Member *m2 = (const Member *)v2;
   return strcmp(m1->name,m2->name);
}

void ListMember(Member *base,int n)//회원 전체 목록 출력 함수
{
   int i = 0;
   for(i=0;i<n;i++)
   {
       printf("번호:%3d   이름:%s\n",base[i].num,base[i].name);
   }
}

int main (void)
{
   Member members[4]=
   {
       {20,"홍길동"},{12,"강감찬"},{3,"을지문덕"},{40,"유관순"}
   };


   printf("========== 정렬 전============\n");
   ListMember(members,4);

   qsort(members,4,sizeof(Member),CompareByNum);//번호 순으로 정렬
   printf("========== 번호 순============\n");
   ListMember(members,4);

   qsort(members,4,sizeof(Member),CompareByName);//이름 순으로 정렬
   printf("========== 이름 순============\n");
   ListMember(members,4);

   return 0;
}

출력

========== 정렬 전============
번호: 20   이름:홍길동
번호: 12   이름:강감찬
번호:  3   이름:을지문덕
번호: 40   이름:유관순
========== 번호 순============
번호:  3   이름:을지문덕
번호: 12   이름:강감찬
번호: 20   이름:홍길동
번호: 40   이름:유관순
========== 이름 순============
번호: 12   이름:강감찬
번호: 40   이름:유관순
번호:  3   이름:을지문덕
번호: 20   이름:홍길동