第k小数字

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static int quickSort(int[] arr, int l, int r, int k){
        if (l == r) {
            return arr[l];
        }
        // 划分为左边小右边大的序列
        int mid = arr[l + r >> 1];
        int i = l - 1, j = r + 1;
        while (i < j){
            while (arr[++i] < mid){};
            while (arr[--j] > mid){};
            if (i < j){
                int tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
        // 如果k是比mid大,则在右边,只需要在右边执行k-Sl,如果k是比mid小,则只需要在左边执行k
        int Sl = j - l + 1;
        if (k <= Sl){
            return quickSort(arr, l, j, k);
        }else {
            return quickSort(arr, j+1, r, k-Sl);
        }
    }

    public static void main(String[] args) throws IOException {
        //10 10
        //50 43 63 97 30 89 89 94 30 33
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n,k;
        String nANDk = br.readLine();
        n = Integer.parseInt(nANDk.split(" ")[0]);
        k = Integer.parseInt(nANDk.split(" ")[1]);
        String[] strs = br.readLine().split(" ");
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(strs[i]);
        }
        System.out.println(quickSort(arr,0,n-1,k));
    }
}

 

posted @ 2024-02-04 22:05  起个数先  阅读(20)  评论(0)    收藏  举报