Namespaces
Variants

std::qsort

cppreference.net에서
 
 
알고리즘 라이브러리
제약된 알고리즘 및 범위에 대한 알고리즘 (C++20)
제약된 알고리즘, 예: ranges::copy, ranges::sort, ...
정렬 및 관련 연산
분할 연산
(C++11)    

정렬 연산
이진 탐색 연산
(분할된 범위에 대해)
집합 연산 (정렬된 범위에 대해)
병합 연산 (정렬된 범위에 대해)
힙 연산
최소/최대 연산
(C++11)
(C++17)
사전식 비교 연산
순열 연산


 
헤더에 정의됨 <cstdlib>
void qsort( void *ptr, std::size_t count,
            std::size_t size, /* c-compare-pred */* comp );
void qsort( void *ptr, std::size_t count,
            std::size_t size, /* compare-pred */* comp );
(1)
extern "C" using /* c-compare-pred */ = int(const void*, const void*);
extern "C++" using /* compare-pred */ = int(const void*, const void*);
(2) (설명 전용*)

ptr이 가리키는 주어진 배열을 오름차순으로 정렬합니다. 배열은 count개의 요소를 포함하며 각 요소의 크기는 size바이트입니다. comp이 가리키는 함수가 객체 비교에 사용됩니다.

comp이 두 요소를 동등하다고 표시하면 그 순서는 지정되지 않습니다.

배열 요소의 타입이 PODType(C++11까지)TriviallyCopyable 타입(C++11부터)이 아니라면, 동작은 정의되지 않습니다.

매개변수

ptr - 정렬할 배열을 가리키는 포인터
count - 배열의 요소 개수
size - 배열의 각 요소의 크기(바이트)
comp - 비교 함수로, 첫 번째 인수가 작으면 두 번째 인수보다 음의 정수 값을 반환하고, 첫 번째 인수가 크면 두 번째 인수보다 양의 정수 값을 반환하며, 인수가 동등하면 0을 반환합니다.

비교 함수의 시그니처는 다음과 동등해야 합니다:

int cmp(const void *a, const void *b);

함수는 전달된 객체를 수정하지 않아야 하며, 배열에서의 위치와 관계없이 동일한 객체에 대해 일관된 결과를 반환해야 합니다.

​

반환값

(없음)

참고

이름과 달리, C++, C 및 POSIX 표준은 이 함수가 퀵 정렬을 사용하여 구현되거나 복잡도나 안정성에 대한 어떠한 보장도 요구하지 않습니다.

C++ 표준 라이브러리에서 제공하는 두 오버로드는 매개변수 comp의 타입이 다르기 때문에 구별됩니다 (언어 연결이 타입의 일부입니다).

예제

다음 코드는 qsort()를 사용하여 정수 배열을 정렬합니다:

#include <array>
#include <climits>
#include <compare>
#include <cstdlib>
#include <iostream>

int main()
{
    std::array a{-2, 99, 0, -743, INT_MAX, 2, INT_MIN, 4};
    
    std::qsort
    (
        a.data(),
        a.size(),
        sizeof(decltype(a)::value_type),
        [](const void* x, const void* y)
        {
            const int arg1 = *static_cast<const int*>(x);
            const int arg2 = *static_cast<const int*>(y);
            const auto cmp = arg1 <=> arg2;
            if (cmp < 0)
                return -1;
            if (cmp > 0)
                return 1;
            return 0;
        }
    );
    
    for (int ai : a)
        std::cout << ai << ' ';
    std::cout << '\n';
}

출력:

-2147483648 -743 -2 0 2 4 99 2147483647

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 발표된 동작 올바른 동작
LWG 405 C++98 배열의 요소는 모든 타입이 가능했다 으로 제한됨 PODType

으로 제한됨

bsearch
지정되지 않은 타입의 요소를 배열에서 검색
sort
요소의 범위를 정렬&(함수 템플릿
is_trivial(C++11)
(C++26부터 폐기됨)
타입이 trivial한지 확인