洛谷P1923 【深基9.例4】求第 k 小的数(java)

java 复制代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.Scanner;
//输入n个数字ai,输出这些数字的第k小的数。最小的数是第0小。
public class Main {

    public static void main(String[] args) throws IOException {
        StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        sc.nextToken();
        int n = (int) sc.nval;
        sc.nextToken();
        int k = (int) sc.nval;
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();//n个数
//        int k = sc.nextInt();//第k小的数
        int a[] = new int[n];
        for (int i = 0; i < n; i++) {
            sc.nextToken();
            a[i] = (int) sc.nval;
        }

        for (int i = 0; i < a.length; i++) {
            for (int j = i; j < a.length; j++) {

            }
        }
        //Quick_sort(a, 0, a.length - 1);
        //System.out.println(a[k]);o(nlogn)
        int i = find(a, 0, a.length - 1, k);

    }
     public static int find (int[] a,int left, int right, int k)
    {	//在数组a的第left到right中寻找第k小的数
        int tem=Partition(a,left,right);
        if(k==tem)
            System.out.println(a[k]);
        else if(k-1<tem)//判断下一次划分在哪一区间进行
            find(a,left,tem-1,k);
        else
            find(a,tem+1,right,k);
        return 0;
    }

    public static void Quick_sort(int[] a, int low, int high) {
        if (low < high) {
            int p = Partition(a, low, high);
            Quick_sort(a, low, p - 1);
            Quick_sort(a, p + 1, high);
        }

    }

    public static int Partition(int[] a, int low, int high) {
        int pivot = a[low];//pivot 支点;中心
        while (low < high) {
            while (low < high && a[high] >= pivot)
                high--;
            a[low] = a[high];
            while (low < high && a[low] <= pivot) low++;
            a[high] = a[low];
        }
            a[low] = pivot;
            return low;//return high
    }
}
相关推荐
无小道4 分钟前
Qt——常用控件
开发语言·qt
vortex59 分钟前
几种 dump hash 方式对比分析
算法·哈希算法
Maynor99620 分钟前
OpenClaw 玩家必备:用 AI 自动追踪社区最新动态
java·服务器·人工智能
aini_lovee21 分钟前
MATLAB基于小波技术的图像融合实现
开发语言·人工智能·matlab
堕27425 分钟前
java数据结构当中的《排序》(一 )
java·数据结构·排序算法
R1nG86334 分钟前
多线程安全设计 CANN Runtime关键数据结构的锁优化
开发语言·cann
初次见面我叫泰隆34 分钟前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
亓才孓39 分钟前
[Class的应用]获取类的信息
java·开发语言
开开心心就好1 小时前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
Never_Satisfied1 小时前
在JavaScript / HTML中,关于querySelectorAll方法
开发语言·javascript·html