洛谷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
    }
}
相关推荐
java1234_小锋几秒前
什么是Java三高架构?
java·开发语言·架构
如竟没有火炬10 分钟前
全排列——交换的思想
开发语言·数据结构·python·算法·leetcode·深度优先
浓墨染彩霞15 分钟前
Java----set
java·经验分享·笔记
5pace15 分钟前
【JavaWeb|第一篇】Maven篇
java·maven
嵌入式小李.man23 分钟前
C++第十三篇:继承
开发语言·c++
寂静山林24 分钟前
UVa 12526 Cellphone Typing
算法
Bryce李小白30 分钟前
Kotlin Flow 的使用
android·开发语言·kotlin
jarreyer1 小时前
python离线包安装方法总结
开发语言·python
李辰洋1 小时前
go tools安装
开发语言·后端·golang
Code_Geo1 小时前
agent设计模式:第三章节—并行化
java·设计模式·agent·并行化