일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 패턴 인식
- 인공지능
- 패턴인식
- 하이퍼바이저
- Neural Network
- 고려대학교
- 신경회로망
- Friendship
- Google App Engine
- 동아리
- 삼성
- 삼성전자 소프트웨어멤버십 SSM
- Bidirectional Associative Memory
- 나르왈프레오
- hopfield network
- 파이썬
- 신경망
- 가상화
- NarwalFreo
- 빅데이터
- 물걸레로봇청소기추천
- 구글 앱 엔진
- SSM
- 증강현실
- Python
- BAM
- 물걸레자동세척로봇청소기
- 삼성소프트웨어멤버십
- 멤버십
- 갤럭시탭S8울트라
- Today
- Total
정보공간_1
[4기 대구 하호성] search.h에 있는 정렬함수 만들기 본문
안녕하세요.
대구멤버십 22-1기 하호성입니다.
C언어 정렬 알고리즘을 일반화 하는 방법에 대해 공부하다가
다 같이 공유하고 싶어 글을 남깁니다.
C언어의 헤더파일 중 SEARCH.H 가 있습니다.
이 헤더파일에 퀵 소트 qsort 함수가 있는데
일반화 돼 있어 원하는 자료를 원하는 비교 함수로 sorting을 할 수 있습니다.
search.h에 있는 qsort의 프로토타입은 다음과 같습니다.
위 프로토타입의 전처리기 문을 제거하구 보기 좋게 정리하면
_Base : 배열의 시작점을 알리는 주소
_NumOfelements : 배열에 있는 알맹이의 개수
_SizeOfElements : 알맹이의 크기(sizeof(알맹이))
_PtFuncCompare : 정렬할 때 쓸 비교함수
위와 같은 프로토타입으로 bouble sort를 만들어 보았습니다.
void __cdecl mysort(int *_Base, size_t _NumOfElements, size_t _SizeOfElements, int (_cdecl* _PtFuncCompare)(const void *x, const void *y))
{
int i, j;
for( i=0 ; i<_NumOfElements ; i++ )
for( j=i+1 ; j<_NumOfElements ; j++ )
if( _PtFuncCompare((char*)_Base+(i*_SizeOfElements), (char*)_Base+(j*_SizeOfElements)) )
myswap((char*)_Base+(i*_SizeOfElements), (char*)_Base+(j*_SizeOfElements), _SizeOfElements);
}
i번째 알맹이에 대한 주소입니다. ((char*)_Base+(i*_SizeOfElements)
기존 배열의 첫 번째 알맹이의 주소에 (알맹이의 크기 * 건너뛸 i) 만큼 더해주었습니다.
1바이트 단위로 주소 연산을 할 수 있게 하기 위해 char *로 캐스팅합니다.
swap함수입니다.
알맹이의 크기만큼 값을 swap합니다.
완성된 소스코드와 예제입니다.
방금 만든 mysort와 search.h에 있는 qsort에 들어간 함수인자를 똑같이 하고
같은 데이터를 정렬합니다.
결과화면
이상 포스팅을 마칩니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[4기 신촌 박영웅] App? Accessory? Appcessory! (2) | 2014.01.14 |
---|---|
[4기 신촌 김시재] OpenGL에서 텍스처를 빠르게 갱신하는 방법 (0) | 2013.12.06 |
[4기 대구 하호성] nullptr (0) | 2013.12.05 |
[4기 대구 하호성] Unity 3D 안드로이드 플러그인 (1) | 2013.12.05 |
[4기 신촌 김형진] 윈도우를 캡쳐하는 서로 다른 두 가지 방법 (0) | 2013.12.05 |