intquick_sort(int q[], int l, int r, int k) { if (l == r) return q[l];
int i = l - 1, j = r + 1, x = q[(l + r)/2]; while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i < j){ int temp = q[i]; q[i] = q[j]; q[j] = temp; } }
if (j - l + 1 >= k) return quick_sort(q, l, j, k); elsereturn quick_sort(q, j + 1, r, k - (j - l + 1)); }
题目描述:
给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k 个数。
intquick_sort(int q[], int l, int r, int k) { if (l == r) return q[l];
int i = l - 1, j = r + 1, x = q[(l + r)/2]; while (i < j) { do i ++ ; while (q[i] < x); do j -- ; while (q[j] > x); if (i < j){ int temp = q[i]; q[i] = q[j]; q[j] = temp; } }
if (j - l + 1 >= k) return quick_sort(q, l, j, k); elsereturn quick_sort(q, j + 1, r, k - (j - l + 1)); }
intmain() { int n, k; int q[N]; scanf("%d %d", &n, &k);