/* * Função recursiva do quickSort. */ void quickSortR( int* array, int inicio, int fim ) { int meio; if ( inicio < fim ) { meio = particionar( array, inicio, fim ); quickSortR( array, inicio, meio ); quickSortR( array, meio + 1, fim ); } }
void quickSortR(T* a, long N) { //N is last element 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); }
/* * Ordenação rápida. * * Neste algoritmo, o array é particionado em duas partes * e a ordenação é feita chamando-se recursivamente a * função de ordenação. * * Complexidade: * Melhor caso: O(n log n) * Caso médio: O(n log n) * Pior caso: O(n^2) */ void quickSort( int *array, int tamanho ) { quickSortR( array, 0, tamanho - 1 ); }