洛谷-P1923 【深基9.例4】求第 k 小的數
阿新 • • 發佈:2020-08-16
洛谷-P1923 【深基9.例4】求第 k 小的數
題目描述
輸入 \(n\)(\(n<5000000\) 且 \(n\) 為奇數) 個數字 \(a_i(0<a_i<10^9)\) ,輸出這些數字的第 \(k\) 小的數。最小的數是第 0 小。
輸入格式
無
輸出格式
無
輸入輸出樣例
輸入 #1
5 1
4 3 2 1 5
輸出 #1
2
C++程式碼
#include <cstdio> using namespace std; int a[5000000]; int find_kth(int l, int r, int k) { int key = a[l]; int low = l, high = r; while (high > low) { while (a[high] >= key && high > low) --high; a[low] = a[high]; while (a[low] <= key && high > low) ++low; a[high] = a[low]; } a[low] = key; if (k == low) return a[low]; else if (k < low) return find_kth(l, low-1, k); else return find_kth(low+1, r, k); } int main() { int n, k; scanf("%d%d", &n, &k); for (int i=0; i<n; ++i) scanf("%d", &a[i]); printf("%d\n", find_kth(0, n-1, k)); return 0; }