/*
* http://sosal.tistory.com/
* made by so_Sal
*/
#include<stdlib.h>
void qsort(void *base, // 데이터 집합 배열의 주소
size_t nmemb, // 데이터 요소의 개수
size_t size, // 각 배열 하나 원소의 크기
int(*compare)(const void *, const void *) //비교 함수에 대한 포인터
);
(gcc man-page 내용이므로, visual studio 함수 원형의 매개변수 이름과 다를 수 있습니다.)
base : 배열의 이름, 즉 데이터 집합 배열의 주소를 받는 매개변수
nmemb : 배열에서 정렬하고자 하는 원소의 갯수
size : 각 원소의 자료형 크기
여기까진 쉬운데, 마지막 매개변수는 뭘까요?
비교를 수행한 결과를 반환하는 함수에 대한 포인터입니다!.
int compare(const void *element1, const void *element2);
element1이 element2보다 크다면 0보다 큰 수를, 같다면 0, 작다면 -를 반환하면 됩니다.
만약 int가 아닌 다른 자료형이라면, 사용자가 직접 정렬해야겠죠?
#include<iostream>
#include<stdlib.h>
#include<ctime>
using namespace std;
int compare(const void *a, const void *b)
{
return *(int *)a - *(int *)b; //크면 양수, 작으면 음수 리턴
}
int main(){
int a[30];
srand(time(0));
for(int i=0;i<15;i++)
a[i] = rand()%100;
for(int i=0;i<15;i++)
printf("%d ",a[i]);
cout<<endl; //랜덤으로 배열을 만든 후 출력
qsort((void*)a,15,sizeof(int),compare); //정렬
for(int i=0;i<15;i++)
printf("%d ",a[i]); //정렬된 배열 출력
cout<<endl;
return 0;
}
'Programing > C- programing' 카테고리의 다른 글
탐색 : 이진탐색 (0) | 2010.08.23 |
---|---|
링크드리스트 :: 추가,삭제,출력,찾기,값변경,위치변경,종료 (0) | 2010.08.22 |
정렬 - bubble sort. 거품정렬 (6) | 2010.08.22 |
트리 : level에 따른 이진트리 자동 생성 소스 (0) | 2010.08.20 |
트리 : 좌우 child를 가지는 트리 만들기 (0) | 2010.08.19 |