qsort
헤더 파일
[언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - stdlib.h
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 이름:홍길동
사용한 함수 [언어 자료구조 알고리즘/C11 표준 라이브러리 함수] - printf 관련 게시글 [C언어] 순차 정렬, 버블 정렬, 선택 정렬, 삽입 정열, 쉘 정렬, 퀵 정렬, 병합 정렬, 힙 정렬)
'언어 자료구조 알고리즘 > C11 표준 라이브러리 함수' 카테고리의 다른 글
ldiv 함수 [표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
---|---|
div 함수 [표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
llabs 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
labs 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
abs 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
bsearch 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
system 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
getenv 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
exit 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |
atexit 함수 [C언어 표준 라이브러리 함수 가이드] (0) | 2016.01.03 |