qsort, qsort_s
|
헤더 파일에 정의됨
<stdlib.h>
|
||
| (1) | ||
|
errno_t qsort_s
(
void
*
ptr, rsize_t count, rsize_t size,
int
(
*
comp
)
(
const
void
*
,
const
void
*
,
void
*
)
,
|
(2) | (C11부터) |
-
- count 또는 size 가 RSIZE_MAX 보다 큰 경우
- ptr 또는 comp 가 널 포인터인 경우 ( count 가 0이 아닌 경우)
-
모든 경계 검사 함수와 마찬가지로,
qsort_s는 구현에 의해 __STDC_LIB_EXT1__ 가 정의되고 사용자가 <stdlib.h> 를 포함하기 전에 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 로 정의한 경우에만 사용 가능함이 보장됩니다.
만약 comp 가 두 요소를 동등하다고 표시하면, 결과 정렬된 배열에서의 순서는 명시되지 않습니다.
목차 |
매개변수
| ptr | - | 정렬할 배열에 대한 포인터 |
| count | - | 배열의 요소 개수 |
| size | - | 배열 내 각 요소의 바이트 단위 크기 |
| comp | - |
비교 함수로, 첫 번째 인수가 두 번째 인수보다
작으면
음의 정수 값을,
첫 번째 인수가 두 번째 인수보다
크면
양의 정수 값을,
인수들이 동등하면 0을 반환합니다.
비교 함수의 시그니처는 다음과 동일해야 합니다: int cmp ( const void * a, const void * b ) ; 이 함수는 전달된 객체를 수정해서는 안 되며, 배열 내 위치에 관계없이 동일한 객체에 대해 호출될 때 일관된 결과를 반환해야 합니다. |
| context | - | 추가 정보(예: 정렬 순서)로, comp 에 세 번째 인수로 전달됨 |
반환값
참고 사항
이름과는 달리, C나 POSIX 표준은 이 함수가 quicksort 를 사용하여 구현되도록 요구하지 않으며, 어떠한 복잡도나 안정성 보장도 하지 않습니다.
다른 경계 검사 함수들과 달리,
qsort_s
는 크기가 0인 배열을 런타임 제약 조건 위반으로 처리하지 않으며, 대신 배열을 변경하지 않고 성공적으로 반환합니다(크기가 0인 배열을 허용하는 다른 함수는
bsearch_s
입니다).
qsort_s
의 구현은
Windows CRT
에서 C 표준과 호환되지 않습니다. Microsoft 버전은 다음과 같이 선언됩니다:
void
qsort_s
(
void
*
base,
size_t
num,
size_t
width,
int
(
*
compare
)
(
void
*
,
const
void
*
,
const
void
*
)
,
void
*
context
)
;
.
이 함수는 값을 반환하지 않으며, 비교 함수는 표준과 관련하여 매개변수 순서가 반전되어 있습니다:
context
가 먼저 전달됩니다.
예제
#include <limits.h> #include <stdio.h> #include <stdlib.h> int compare_ints(const void* a, const void* b) { int arg1 = *(const int*)a; int arg2 = *(const int*)b; if (arg1 < arg2) return -1; if (arg1 > arg2) return 1; return 0; // return (arg1 > arg2) - (arg1 < arg2); // possible shortcut // return arg1 - arg2; // erroneous shortcut: undefined behavior in case of // integer overflow, such as with INT_MIN here } int main(void) { int ints[] = {-2, 99, 0, -743, 2, INT_MIN, 4}; int size = sizeof ints / sizeof *ints; qsort(ints, size, sizeof(int), compare_ints); for (int i = 0; i < size; i++) printf("%d ", ints[i]); printf("\n"); }
출력:
-2147483648 -743 -2 0 2 4 99
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.22.5.2 The qsort 함수 (p: TBD)
-
- K.3.6.3.2 The qsort_s 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.22.5.2 The qsort function (p: 258-259)
-
- K.3.6.3.2 The qsort_s function (p: 442-443)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.22.5.2 The qsort function (p: 355-356)
-
- K.3.6.3.2 The qsort_s function (p: 609)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.20.5.2 qsort 함수 (p: 319)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 4.10.5.2 qsort 함수
참고 항목
|
(C11)
|
지정되지 않은 타입의 요소를 배열에서 검색합니다
(함수) |
|
C++ documentation
for
qsort
|
|