JAVA排序问题求若干个数的数组中第k个最大值-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JAVA排序问题求若干个数的数组中第k个最大值

蛮大人123 2016-05-31 14:10:43 2759

代码:

public class Sorting0{
public int[] sort(int[] num){
for(int i=0;i<num.length;i++){
        for(int j=0;j<num.length-i-1;j++){

            if(num[j]<num[j+1]){

                int n=0;
                n=num[j];
                num[j]=num[j+1];
                num[j+1]=n;
            }
        }
    }
    return num;
}
public static void main(String[] args){
    Scanner input=new Scanner(System.in);
    int k=input.nextInt();
    Sorting0 s=new Sorting0();
    int[] num=new int[100];
    for(int i=0;i<k;i++){

        num[i]=input.nextInt();
    }
    s.sort(num);
    while(input.hasNext()){
        if(input.nextInt()>num[k-1]){
            if(input.nextInt()>num[k-2]){
                num[k-1]=num[k-2];
            }
            else{
                num[k-1]=input.nextInt();
            }
        }
    }
    System.out.println(num[k-1]);
}
}

不知道为什么不对,求助.

Java
分享到
取消 提交回答
全部回答(3)
  • 左小猫
    2019-07-17 19:21:52
    import java.util.Scanner; import java.util.Comparator; import java.util.ArrayList; public class Test implements Comparator{ public static void main(String[] args){ Scanner keyboard = new Scanner(System.in); ArrayList nums = new ArrayList<>(); System.out.print("请输入要存储的数字总个数:"); int count = keyboard.nextInt(); for(int i = 1 ; i<= count ; i ++){ System.out.print(String.format("请输入第%d个数值:",i)); nums.add(keyboard.nextInt()); } nums.sort(new Test()); System.out.print("请输入要查询的倒数第几位:"); int index_D = keyboard.nextInt(); assert index_D > 0; int index = 0; if(index_D <= nums.size()){ index = nums.size() - index_D; } System.out.println(String.format("倒数第%d位是%d.",index_D,nums.get(index))); } public int compare(Integer i1,Integer i2){ return i1.compareTo(i2); } }
    0 0
  • mrcamel
    2019-07-17 19:21:52

    Collections.sort(list);
    list.get(k-1);

    0 0
  • 蛮大人123
    2019-07-17 19:21:52

    排序没有问题(当然内侧循环没必要对已经排序的部分再遍历了)。
    int k=input.nextInt();
    这里输入的k代表的应该是数组的大小,而不是第k大的k,建议将k重命名为n
    `while(input.hasNext()){
    if(input.nextInt()>num[k-1]){
    if(input.nextInt()>num[k-2]){
    num[k-1]=num[k-2];`
    这里不对,你怎么又去读取输入呢?你这里需要输入的是你指定的k,然后直接返回或者输出num[n-k]

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程