포스트

qsort

qsort

qsort 기본형

1
2
3
4
5
int _CompareFunction(const void* a, const void*b){
  return 1 or 0;
}

qsort(void*  _Base, size_t _NumOfElements, size_t _SizeOfElements, _CompareFunction);

cmp함수와 함께 사용

  • 어떤 형태의 데이터든 받기 위해 void*와 (함수 내에서 원하는 자료형으로 변환해서 사용)
  • 정렬만 할 것이기에 데이터 무결성 보장 const 사용 (데이터 안 변함)

  • return 참이면(양수) 위치 교환
  • return 거짓이면(음수) 위치 유지

qsort 활용 (in 구조체 멤버)

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
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 100000

typedef struct {
	int x;
	int y;
}P;

int cmp1(const void* a, const void* b) {
	P* pa = (P*)a;
	P* pb = (P*)b;

	if (pa->x == pb->x) {
		return pa->y - pb->y;
	}
	else return pa->x - pb->x;
}



int main() {
	int N;
	scanf("%d", &N);

	P p[MAX];
	for (int i = 0; i < N; i++) {
		scanf("%d %d", &p[i].x, &p[i].y);
	}


	qsort(p, N, sizeof(P), cmp1);
	
	for (int i = 0; i < N; i++) {
		printf("%d %d\n", p[i].x, p[i].y);
	}
	return 0;

}