constint N = 1e6 + 10; int q[N]; voidquick_sort(int q[], int l, int r);
intmain() { int n, k; scanf("%d %d", &n, &k); for (int i = 0; i < n; i ++) scanf("%d", &q[i]); quick_sort(q, 0, n - 1); printf("%d\n", q[k - 1]); return0; }
voidquick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + (r- l) / 2]; while (i < j){ do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); } quick_sort(q, l, j); quick_sort(q, j + 1, r); }
constint N = 1e6 + 10; int q[N]; intquick_sort(int q[], int l, int r, int k);
intmain(void) { int n, k; scanf("%d %d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &q[i]); printf("%d\n", quick_sort(q, 0, n - 1, k)); // 这里传入的是 k return0; }
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 - l) / 2]; while (i < j){ do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); } int sl = j - l + 1; // 左侧长度 if (k <= sl) returnquick_sort(q, l, j, k); // 左侧 elsereturnquick_sort(q, j + 1, r, k - sl); // 右侧 }
intmain(void) { scanf("%d %d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &q[i]); // 返回的就是第 k 大的数,注意这里传入的是下标 k - 1 printf("%d\n", quick_sort(0, n - 1, k - 1)); return0; }
intquick_sort(int l, int r, int k){ // 如果找到了则直接返回 if (l >= r) return q[l]; int i = l - 1, j = r + 1, x = q[l + (r - l) / 2]; while (i < j){ do i++; while (q[i] < x); do j--; while (q[j] > x); if (i < j) swap(q[i], q[j]); }
// 如果第 k 大的数在左半边,则递归左半边寻找 if (k <= j) returnquick_sort(l, j, k); // 否则递归右半边 returnquick_sort(j + 1, r, k); }