1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| int QuickSelect(int A[], int low, int high, int k) { if (low == high) return A[low]; int pivotPos = Partition(A, low, high); if (pivotPos == k) { return A[pivotPos]; } else if (pivotPos > k) { return QuickSelect(A, low, pivotPos - 1, k); } else { return QuickSelect(A, pivotPos + 1, high, k); } } int Partition(int A[], int low, int high) { int pivot = A[low]; while (low < high) { while (low < high && A[high] >= pivot) --high; A[low] = A[high]; while (low < high && A[low] <= pivot) ++low; A[high] = A[low]; } A[low] = pivot; return low; }
|