输入一个无序序列,输出第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);
}
}
}