Быстрая сортировка (англ. quicksort), часто называемая qsort по имени реализации в стандартной библиотеке языка Си — широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O(n lg n) обменов при упорядочении n элементов).
Использование функцию qsort из библиотеки stdlib.h qsort( указатель_на_массив, количество_элементов, размер_элемента, функция_сравнения_элементов);
Метод основан на разделении массива на части. Общая схема такова:
Рассмотрим алгоритм более детально.
Делим массив пополам. Входные данные: массив a[0]…a[N] и элемент p, по которому будет производиться разделение.
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; template <class T> void quickSortR(T a[], long N) { // На входе - массив a[], a[N] - его последний элемент. long i = 0, j = N; // поставить указатели на исходные места T temp, p; p = a[ N>>1 ]; // центральный элемент // процедура разделения do { while ( a[i] < p ) i++; while ( a[j] > p ) j--; if (i <= j){ temp = a[i]; a[i] = a[j]; a[j] = temp; i++; j--; } }while ( i<=j ); // рекурсивные вызовы, если есть, что сортировать if ( j > 0 ) quickSortR(a, j); if ( N > i ) quickSortR(a+i, N-i); } void main(){ srand(time(NULL)); const long SIZE=10; int ar[SIZE]; // до сортировки for(int i=0;i<SIZE;i++){ ar[i]=rand()%100; cout<<ar[i]<<"\t"; } cout<<"\n\n"; quickSortR(ar,SIZE-1); // после сортировки for(int i=0;i<SIZE;i++){ cout<<ar[i]<<"\t"; } cout<<"\n\n"; }