Standard C library provides qsort function that can be used for sorting an array. Following is the prototype of qsort() function. // Sort an array of any type. The parameters are base // address of array size of array and pointer to // comparator function void qsort (void* base size_t num size_t size int (*comparator)(const void* const void*));
It requires a pointer to the array the number of elements in the array the size of each element and a comparator function. We have discussed qsort comparator in detail овде . Ц ++ Стандардна библиотека пружа сличну функцију () која је настала у СТЛ-у. Разговарали смо о Ц ++ Сорт овде . Following are prototypes of C++ sort() function. // To sort in default or ascending order. template void sort(T first T last); // To sort according to the order specified // by comp. template void sort(T first T last Compare comp);
The order of equal elements is not guaranteed to be preserved. C++ provides std::stable_sort that can be used to preserve order. Поређење са Ксортом и сортирање () 1. Детаљи о имплементацији: Пошто је име сугерира да КСорт функција користи алгоритам КуицкСорта да сортира дат низ иако Ц стандард не захтева да имплементира Куицсорт. Ц ++ Функција сортирања користи уводну улогу која је хибридни алгоритам. Различите имплементације користе различите алгоритме. ГНУ Стандард Ц ++ библиотека, на пример користи алгоритам са 3-дијелом хибридног сортирања: Интросорт се изводи прва (иутроорт је хибрид брзине и врсте брзих и хрпе), а затим у успостављању сортирања на резултату. 2 Сложеност: Ц стандарда не говори о својој сложености КСорта. Нови стандардни Ц ++ 11 захтева да сложеност сортирања буде О (Нлог (Н) у најгорем случају. Претходне верзије Ц ++ као што су Ц ++ 03 омогућавају могући најгори сценариј о (Н ^ 2). Потребно је само просечна сложеност за (н лог н). 3. Временско време: STL’s sort ran faster than C’s qsort because C++’s templates generate optimized code for a particular data type and a particular comparison function. STL’s sort runs 20% to 50% faster than the hand-coded quicksort and 250% to 1000% faster than the C qsort library function. C might be the fastest language but qsort is very slow. When we tried to sort one million integers on C++14 Time taken by C qsort() was 0.247883 sec and time taken by C++ sort() was only 0.086125 sec CPP // C++ program to demonstrate performance of // C qsort and C++ sort() algorithm #include using namespace std; // Number of elements to be sorted #define N 1000000 // A comparator function used by qsort int compare(const void * a const void * b) { return ( *(int*)a - *(int*)b ); } // Driver program to test above functions int main() { int arr[N] dupArr[N]; // seed for random input srand(time(NULL)); // to measure time taken by qsort and sort clock_t begin end; double time_spent; // generate random input for (int i = 0; i < N; i++) dupArr[i] = arr[i] = rand()%100000; begin = clock(); qsort(arr N sizeof(int) compare); end = clock(); // calculate time taken by C qsort function time_spent = (double)(end - begin) / CLOCKS_PER_SEC; cout << 'Time taken by C qsort() - ' << time_spent << endl; time_spent = 0.0; begin = clock(); sort(dupArr dupArr + N); end = clock(); // calculate time taken by C++ sort time_spent = (double)(end - begin) / CLOCKS_PER_SEC; cout << 'Time taken by C++ sort() - ' << time_spent << endl; return 0; }
Output : Time taken by C qsort() - 0.247883 Time taken by C++ sort() - 0.086125
C++ sort() is blazingly faster than qsort() on equivalent data due to inlining. sort() on a container of integers will be compiled to use std::less::operator() by default which will be inlined and sort() will be comparing the integers directly. On the other hand qsort() will be making an indirect call through a function pointer for every comparison which compilers fails to optimize. 4. Флексибилност: СТЛ сортирање ради за све врсте података и за различите контејнере података попут Ц срама Ц ++ вектори Ц ++ Декуес итд и осталих контејнера који корисник може написати. Ова врста флексибилности је прилично тешко постићи у Ц. 5. Сигурност: У поређењу са КСортом, предлозани сорт је више безбедан у типу јер не захтева приступ подацима о несигурним несигурним показивачима као што то чини КСорт. Референце: хттп: //тхеори.станфорд.еду/~амитп/рантс/ц++-вс-ц/ хттпс: //ен.википедиа.орг/вики/сорт_(ц%2Б%2Б)