输入一个无序序列,输出第K大的数。

输入一个无序序列,输出第K大的数。 

import java.util.Scanner;
import java.util.*;

public class Main {
	public static void main (String args[]){
		Scanner in=new Scanner(System.in);
		while(in.hasNextLine()){
			String s=in.nextLine();//读取当前行
			String[] ss=s.split(" ");//split把字符串按照指定的分割 符 空格进行分割,然后返回字符串数组,
			 int n=ss.length;
			 int k=in.nextInt();
			 int a[]=new int[n];//将字符串写入数组a
			 for(int i=0;i<n;i++){
				 a[i]=Integer.parseInt(ss[i]);
				 }
			 System.out.print(findKth(a,n,k));					
		}
		
		in.close();
	}
	
	public static int findKth(int[] a, int n, int k) {
        // write code here
        Arrays.sort(a);
        return a[n-k];
    }
}


快排

import java.util.Scanner;
public class Main {
	public static void main (String args[]){
		Scanner in=new Scanner(System.in);
		while(in.hasNextLine()){
			String s=in.nextLine();//读取当前行
			String[] ss=s.split(" ");//split把字符串按照指定的分割 符 空格进行分割,然后返回字符串数组,
			 int n=ss.length;
			 int k=in.nextInt();
			 int a[]=new int[n];//将字符串写入数组a
			 for(int i=0;i<n;i++){
				 a[i]=Integer.parseInt(ss[i]);
				 }
			 quickSort(a,0,n-1);
			 System.out.print(a[n-k]);//因为快排给出的是从小到大的顺序,若是从大到小,则是a[k-1]
		}
		
		in.close();
	}
	
	 private static void quickSort(int[] a, int left,int right){  
	        //当可以进行快排时  
	        if(left < right){  
	            //把最左边的值设为key,把left的值赋给low,right的值赋给high  
	            int key = a[left];  
	            int low = left;  
	            int high = right;  
	            //当low<high时,循环把比key更大的放在它右边,比key更小的值放在它的左边  
	            while(low<high){  
	                //如果右边的值大于key则一直向后对比  
	                while(low < high && a[high] >= key){  
	                    high--;  
	                }  
	                //符合是把高位的值赋给低位的值  
	                a[low] = a[high];  
	                //如果左边的值一直小于key则一直向前对比  
	                while(low < high && a[low] < key){  
	                    low++;  
	                }  
	                //把地位的值赋值给高位  
	                a[high] = a[low];  
	            }  
	            //把key的值赋给指针停止的地方  
	            a[low] = key;  
	            quickSort(a,left,low-1);  
	            quickSort(a,low+1,right);                 
	        }  
	    }  
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值