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);
    }
}
相关推荐
袋鼠云数栈19 分钟前
集团数字化统战实战:统一数据门户与全业态监管体系构建
大数据·数据结构·人工智能·多模态
小月球~1 小时前
天梯赛 · 并查集
数据结构·算法
仍然.1 小时前
算法题目---模拟
java·javascript·算法
三道渊3 小时前
C语言:文件I/O
c语言·开发语言·数据结构·c++
kali-Myon3 小时前
CTFshow-Pwn142-Off-by-One(堆块重叠)
c语言·数据结构·安全·gdb·pwn·ctf·
潇冉沐晴3 小时前
DP——背包DP
算法·背包dp
GIOTTO情4 小时前
2026 世界互联网大会亚太峰会|AI 时代媒介投放的技术实战与算法优化
人工智能·算法
逆境不可逃4 小时前
LeetCode 热题 100 之 543. 二叉树的直径 102. 二叉树的层序遍历 108. 将有序数组转换为二叉搜索树 98. 验证二叉搜索树
算法·leetcode·职场和发展
计算机安禾4 小时前
【数据结构与算法】第19篇:树与二叉树的基础概念
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
副露のmagic4 小时前
哈希章节 leetcode 思路&实现
算法·leetcode·哈希算法