洛谷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
    }
}
相关推荐
Tiandaren3 小时前
Selenium 4 教程:自动化 WebDriver 管理与 Cookie 提取 || 用于解决chromedriver版本不匹配问题
selenium·测试工具·算法·自动化
胚芽鞘6813 小时前
关于java项目中maven的理解
java·数据库·maven
nbsaas-boot4 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧4 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7894 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
CJi0NG4 小时前
【自用】JavaSE--算法、正则表达式、异常
java
风无雨5 小时前
GO 启动 简单服务
开发语言·后端·golang
Hellyc5 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
斯普信专业组5 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
今天又在摸鱼5 小时前
Maven
java·maven