int quick_sort_r(int array[], int start, int end) { if (start < end) { int j = quick_sort_partion(array, start, end); quick_sort_r(array, start, j - 1); quick_sort_r(array, j + 1, end); } return 0; }
static void quick_sort_r(register int a[], register int left, register int right) { //if array is empty or only 1 element sort is redudant if (left < right && !is_sorted(a, left, right)) { if ((right - left) < THRESHOLD) { insertion_sort_sub(a, left, right + 1); return; } //get the random number register int random = rand() % (right - left + 1) + left; //swap random to the last swap((a + random), (a + right)); //get the pivot index register int pivot_index = random_partition(a, left, right); //recursively run the sort again with half-left and half-right of the array quick_sort_r(a, left, pivot_index - 1); quick_sort_r(a, pivot_index + 1, right); } }
void quick_sort_random(register int a[], register int length) { quick_sort_r(a, 0, length - 1); }
int quick_sort(int array[], int size) { quick_sort_r(array, 0, size); return 0; }