Acwing---786. 第k个数

第k个数

1.题目

给定一个长度为 n 的整数数列,以及一个整数 k,请用快速选择算法求出数列从小到大排序后的第 k

个数。

输入格式

第一行包含两个整数 n 和 k。

第二行包含 n 个整数(所有整数均在 1∼10^9范围内),表示整数数列。

输出格式

输出一个整数,表示数列的第 k 小数。

数据范围
1 ≤ n ≤ 100000 , 1 ≤ k ≤ n 1≤n≤100000 , 1≤k≤n 1≤n≤100000,1≤k≤n

输入样例:

5 3

2 4 1 5 3

输出样例:

3

2.基本思想

快速排序

3.代码实现

csharp 复制代码
 
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(new BufferedInputStream(System.in));
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
        qucik_sort(arr, 0, n - 1);
            System.out.println(arr[k-1]);
    }

    private static void qucik_sort(int[] arr, int l, int r) {
        //判断边界
        if (l >= r) return;

        int x = arr[l], i = l - 1, j = r + 1;
        while (i < j) {
            do {
                i++;
            } while (arr[i] < x);
            do {
                j--;
            } while (arr[j] > x);
            //交换
            if (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        //递归子序列
        qucik_sort(arr, l, j);
        qucik_sort(arr, j + 1, r);
    }
}
相关推荐
CoderYanger1 小时前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
小雨笙笙2 小时前
机器学习:评估模型与选择
人工智能·算法·机器学习
高亦真2 小时前
今天是学习嵌入式的第35天
linux·学习·算法
HugoStudio_SWAN2 小时前
洛谷 P1319 / P1320 压缩技术——同一枚硬币的正反面
c++·学习·程序人生·算法
wdfk_prog4 小时前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先
BioRunYiXue4 小时前
科研干货 | IC50全面解读:概念解析、实验设计与数据分析要点
java·开发语言·javascript·人工智能·算法·数据挖掘·数据分析
hahaha60164 小时前
HLS高层次综合设计技巧--UART_TX接收模块设计案例
人工智能·算法·计算机视觉
302wanger4 小时前
一个程序员看完《逆行人生》:电影没说透的,比电影更扎心
算法
hele_two4 小时前
C++模拟蚁群(二)
c++·算法·数学建模·图形渲染
WK100%4 小时前
LeetCode双题:滑动窗口破解最小子数组
c++·经验分享·笔记·算法