Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C qsort() 대 C++ sort()

<시간/>

여기에서 우리는 C의 qsort()와 C++의 sort()의 차이점을 볼 것입니다.

C는 배열을 정렬하는 데 사용할 수 있는 qsort() 함수를 제공합니다. 함수 인수 및 구문은 다음과 같습니다.

void qsort(void *base, size_t num, size_t size, int (*comparator) (const void*, const void*));

이 함수는 해당 배열의 기본 주소, 해당 배열의 요소 수를 취합니다. 배열의 각 항목 크기 및 비교기 기능.

C++는 sort() 함수를 제공합니다. 이것은 C++ STL 내부에 있습니다. 인수 및 구문은 다음과 같습니다.

void sort(T first, T last, Compare c);

여기서 반복되는 요소의 순서는 보존되지 않습니다. 이를 위해 C++ STL에서 제공하는 stable_sort를 사용할 수 있습니다.

qsort()와 sort()의 차이점

C의 qsort() C++의 sort()
퀵소트 알고리즘을 사용합니다. 소개를 사용합니다. 이것은 하이브리드 정렬 알고리즘입니다. 여기에서 다른 구현은 다른 알고리즘을 사용합니다. GNU C++ STL은 세 부분으로 구성된 하이브리드 정렬을 사용합니다. Introsort, Quicksort 및 Insertion Sort.
C 표준은 이 정렬 알고리즘의 복잡성에 대해 이야기하지 않습니다. 이 경우 복잡성은 C++11 sort()에서 최악의 경우 O(n logn)입니다. 일부 이전 버전의 sort()는 최악의 경우 O(n2)를 사용하고 평균의 경우 O(nlogn)을 사용합니다.
이 종류의 실행 시간은 thansort()보다 깁니다. 실행 시간이 qsort()보다 짧습니다.
qsort()는 다른 종류의 데이터에 대해 유연하지 않습니다. sort()는 유연합니다. 이것은 C 배열, C++ 벡터, C++ 데크 및 기타 컨테이너도 정렬할 수 있습니다.
이 정렬은 더 이상 유형 안전하지 않습니다. 안전하지 않은 void 포인터를 사용하여 데이터에 액세스합니다. 이 정렬 기술은 더 안전합니다. 데이터 액세스를 위해 안전하지 않은 void 포인터가 필요하지 않습니다.