«

»

Αυγ 02

c++ qsort 예제

STL의 정렬은 손으로 코딩된 퀵정렬보다 20%에서 50% 더 빠르며 C qsort 라이브러리 함수보다 250% ~ 1000% 더 빠릅니다. C는 가장 빠른 언어일 수 있지만 qsort는 매우 느립니다. 다음 코드는 qsort(를 사용하여 정수 배열을 정렬합니다. 3. 실행 시간: C++의 템플릿은 특정 데이터 형식 및 특정 비교 함수에 최적화된 코드를 생성하기 때문에 STL의 정렬이 C의 qsort보다 빠르게 실행되었습니다. 표준 C 라이브러리는 배열을 정렬하는 데 사용할 수 있는 qsort 함수를 제공합니다. 다음은 qsort() 함수의 프로토타입입니다. C++ sort()는 인라인으로 인해 동등한 데이터에 대한 qsort()보다 매우 빠릅니다. sort() 정수 컨테이너에서 std:less::operator()를 기본적으로 사용하도록 컴파일되며, 인라인되고 sort()가 정수를 직접 비교합니다. 반면에 qsort()는 컴파일러가 최적화하지 못하는 모든 비교에 대해 함수 포인터를 통해 간접 호출을 합니다. 5. 안전: qsort에 비해, 템플릿 정렬은 qsort와 마찬가지로 안전하지 않은 void 포인터를 통해 데이터 항목에 액세스할 필요가 없으므로 형식 안전도 가 더 높습니다.

C++14에서 백만 개의 정수를 정렬하려고 할 때 C qsort()가 취한 시간은 0.247883초이고 C++ sort()가 취한 시간은 0.086125초 2에 불과했습니다. 복잡성 : C 표준은 qsort의 복잡성에 대해 이야기하지 않습니다. 새로운 C++11 표준은 최악의 경우 정렬의 복잡성이 O(Nlog(N))여야 합니다. C++03과 같은 이전 버전의 C++에서는 O(N^2)의 최악의 시나리오를 사용할 수 있습니다. 평균 복잡성만 O(N 로그 N)여야 합니다. qsort 및 정렬() 1과 비교합니다. 구현 세부 정보: 이름에서 알 수 있듯이 qsort 함수는 QuickSort 알고리즘을 사용하여 지정된 배열을 정렬하지만 C 표준에서는 quicksort를 구현할 필요가 없습니다. 배열에 대한 포인터, 배열의 요소 수, 각 요소의 크기 및 비교 함수가 필요합니다. 우리는 여기에 자세히 qsort 비교기 논의했다. 다음 예제에서는 qsort() 함수의 사용을 보여 주며 있습니다. C 라이브러리 함수 void qsort(보이드 *기본, size_t nitems, size_t 크기, int(*비교)(const void *, const void*))는 배열을 정렬합니다.

C ++ 정렬 함수는 하이브리드 알고리즘인 인트로정렬을 사용합니다. 구현마다 다른 알고리즘을 사용합니다. 예를 들어 GNU 표준 C++ 라이브러리는 3부분으로 구성된 하이브리드 정렬 알고리즘을 사용합니다. . 이름에도 불구하고 C++, C 및 POSIX 표준은 quicksort를 사용하여 이 기능을 구현하거나 복잡성 또는 안정성을 보장할 필요가 없습니다. size – 이것은 배열의 각 요소의 바이트 크기입니다. 우리가 컴파일하고 다음과 같은 결과를 생성할 위의 프로그램을 실행하자 – 함수는 그것에 전달 된 개체를 수정하지 않아야합니다. compar – 이것은 두 가지 요소를 비교하는 기능입니다. 배열의 요소 형식은 TrivialType이어야 하며 그렇지 않으면 동작이 정의되지 않습니다. 4. 유연성: STL의 정렬은 모든 데이터 유형 및 C 배열, C++ 벡터, C++ deques 등사용자가 작성할 수 있는 기타 컨테이너와 같은 다양한 데이터 컨테이너에 대해 작동합니다.

이러한 종류의 유연성은 C에서 달성하기가 다소 어렵습니다. 동일한 요소의 순서가 유지될 것이라고 보장할 수는 없습니다. C++는 순서를 유지하는 데 사용할 수 있는 std::stable_sort를 제공합니다. 오름차순으로 ptr로 가리키는 지정된 배열을 정렬합니다. 배열에는 크기 바이트의 개수 요소가 포함되어 있습니다. comp가 가리키는 함수는 개체 비교에 사용됩니다. C++ 표준 라이브러리는 STL에서 시작된 유사한 함수 정렬()을 제공합니다. 여기서 C++ 정렬에 대해 설명했습니다. 다음은 C++ sort() 함수의 프로토타입입니다.

참조: http://theory.stanford.edu/~amitp/rants/c++-vs-c https://en.wikipedia.org/wiki_(C%2B%2B) 구성 요소가 동등한 것으로 표시되면 순서가 지정되지 않습니다. . 함수는 전달된 개체를 수정할 수 없으며 배열의 위치에 관계없이 동일한 개체에 대해 호출될 때 일관된 결과를 반환해야 합니다.


by Bliss Drive Review