Ejemplo n.º 1
0
void randomizedQuickSort(vectoru32& v, u32 p, u32 r) {
  if ( p < r ) {
    u32 q = randomizedPartition(v, p, r);
    if (q != 0)
      randomizedQuickSort(v, p, q - 1);
    randomizedQuickSort(v, q + 1, r);
  }
}
int selectKthOrder(int * arr, int start, int end, int k) {
    if(arr == NULL || start > end || k < start || k > end) {
        perror("args error");
        return -1;
    }
    
    int pivot = randomizedPartition(arr, start, end);
    if(pivot > k) return selectKthOrder(arr, start, pivot-1, k);
    if(pivot < k) return selectKthOrder(arr, pivot+1, end, k);
    return arr[pivot];
}
void quickSort(int * arr, int start, int end){
    if(arr == NULL) {
        perror("args error");
    }
    
    if(start < end){
        int pivot = randomizedPartition(arr, start, end);
        quickSort(arr, start, pivot - 1);
        quickSort(arr, pivot + 1, end);
    }
}
Ejemplo n.º 4
0
	// select i-st largest number from A[p] to A[r]
	Distance randomizedSelect(Distance* A, int p, int r, int i) {
		if (p == r)
			return A[p];
		int q = randomizedPartition(A, p, r);
		int k = q - p + 1;
		if (i == k) // the pivot value is the answer
			return A[q];
		else if (i < k) // on the left
			return randomizedSelect(A, p, q-1, i);
		else // on the right
			return randomizedSelect(A, q+1, r, i-k);
	}