From 3bba61c99cecd78c4dfe4765c91b4bc29b39eb31 Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Sat, 24 Jan 2026 20:35:15 +0900 Subject: [PATCH] logseq 20260124 --- pages/C.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/pages/C.md b/pages/C.md index d85a6d5..7be5e5c 100644 --- a/pages/C.md +++ b/pages/C.md @@ -4,4 +4,74 @@ deck:: Logseq/coding tip - ![image.png](../assets/image_1749986661502_0.png) #card id:: 690f2348-194d-46ec-bf5c-855c25c28cd5 - ![image.png](../assets/image_1749986614051_0.png) -- \ No newline at end of file +- +- +- ## **► 라이브러리 함수 정리** + - ### ◼︎ qsort() + - 설명 + - c언어 표준 라이브러리인 {{c1 stdlib.h}}에서 기본으로 제공하는 정렬함수로서 {{c1 퀵 정렬}}을 기반으로 동작한다. + id:: 6974a942-9c7a-4f48-85e0-7867a5355564 + - 매개변수 + - 함수 원형 + id:: 6974a9ad-91a0-44f1-856e-4eb90df48f7d + ```c + void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); + ``` + #card #depth-1 + - base : 정렬한 배열의 시작주소(배열의 이름) + - nmemb : 배열의 요소 개수 + - size : 배열 요소 하나의 크기(바이트 단위) (sizeof(type)) + - compar : 정의된 비교 함수의 함수 포인터 + - 비교 함수는 다음과 같은 형태여야 함 + ```c + int compare(const void *a, const void *b) + ``` + - 반환 값이 양수인 경우 :-> a가 b보다 우선순위가 낮다(즉 a와 b를 바꾼다.) + id:: 6974aad1-c74d-4a70-af13-c232ae9e2ecf + - 반환 값이 음수인 경우 :-> a가 b보다 우선순위가 높다(즉 a와 b를 바꾸지 않는다.) + id:: 6974ab86-8dac-413f-b490-f4ff0710ddf0 + - 반환 값이 0인 경우 :-> 바꾸지 않는다(qsort는 불안정 정렬이기에 바꾸지 않는다고 해서 순서가 보장되진 않는다) + id:: 6974abaa-cef4-41c8-949f-a7dd46009e39 + - 예시 + - 정수형 배열 arr를 오름차순으로 정렬하기 위해서 compare_int 함수를 정의하고 main 함수에서 호출해서 정렬하라. #card + id:: 6974ac13-6e2d-4561-ba3e-8aef093f47e6 + - ```c + #include + #include + + int compare_int(const void* a, const void* b) { + return *(int*)a - *(int*)b; + } + + int main() { + int arr[10] = {5,2,7,8,3,4,0,9,1,6}; + qsort(arr, 10, sizeof(int), compare_int); + + for(int i=0; i<10; i++) printf("%d ", arr[i]); + // 0 1 2 3 4 5 6 7 8 9 + return 0; + } + ``` + - 문자열들의 배열 arr를 사전순으로 정렬하기 위해서 compare_str 함수를 정의하고 main 함수에서 호출해서 정렬하라. #card + id:: 6974adc4-0d34-4885-b1a9-400634df4adc + - ```c + #include + #include + #include // strcmp 사용 + + int compare_str(const void *a, const void *b) { + // a와 b는 "문자열(char*)"을 가리키는 포인터(void*)임. + // 따라서 *(char**)a 로 캐스팅하여 실제 문자열 주소를 얻어야 함. + return strcmp(*(char **)a, *(char **)b); + } + + int main() { + const char *arr[] = {"banana", "apple", "cherry"}; + int n = 3; + + qsort(arr, n, sizeof(char *), compare_str); + for(int i=0; i