786.第k個數
阿新 • • 發佈:2020-10-09
給定一個長度為n的整數數列,以及一個整數k,請用快速選擇演算法求出數列從小到大排序後的第k個數。
輸入格式
第一行包含兩個整數 n 和 k。
第二行包含 n 個整數(所有整數均在1~109範圍內),表示整數數列。
輸出格式
輸出一個整數,表示數列的第k小數。
資料範圍
1≤n≤100000,
1≤k≤n
輸入樣例:
5 3
2 4 1 5 3
輸出樣例:
3
參考程式碼
import java.util.Scanner; public class Main { public static int quickSort(int[] a, int l, int r, int k) { int x = a[l]; int i = l, j = r; while (i < j) { while (a[j] >= x && i < j) { j--; } a[i] = a[j]; while (a[i] <= x && i < j) { i++; } a[j] = a[i]; } a[i] = x; int len = j - l + 1; if (k == len) { return a[j]; } else if (k < len) { return quickSort(a, l, j - 1, k); } else { return quickSort(a, j + 1, r, k - len); } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); } System.out.println(quickSort(a, 0, n - 1, k)); sc.close(); } }