Example #1
0
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);
}
Example #4
0
int quick_sort(int array[], int size) {
    quick_sort_r(array, 0, size);
    return 0;
}