/**
* 选取temp=arr[i]作为枢纽,比他小的放他左边,大的放右边,然后判断temp的位置,如果他的位置为k-1,
* 他就是k小的数;如果他小于k-1,那么k小的数一定在他右边,采用递归在右边继续查找;大则查找左边。
*/
import java.util.Scanner;
public class getKMin {
public static int quickSort(int[] arr,int low,int high,int k){
int i,j,temp;
if(low>high)
return Integer.MIN_VALUE;
i=low+1;
j=high;
temp=arr[i];
while(i<j){
while(i<j&&arr[j]>=temp)
j--;
if(i<j)
arr[i++]=arr[j];
while(i<j&&arr[i]<temp)
i++;
if(i<j)
arr[j--]=arr[i];
}
arr[i]=temp;
if(i+1==k)
return temp;
else if(i+1>k)
return quickSort(arr, low, i-1, k);
else
return quickSort(arr, i+1, high, k);
}
public static int getKMin(int[] arr,int k){
if(arr==null)
return Integer.MIN_VALUE;
if(arr.length<k)
return Integer.MIN_VALUE;
return quickSort(arr, 0, arr.length-1, k);
}
public static void main(String[] args) {
int arr[]={1,5,2,6,8,0,6};
Scanner input=new Scanner(System.in);
int k=input.nextInt();
System.out.println("第"+k+"小的数为:"+getKMin(arr,k));
}
}
数组中第k小的数
最新推荐文章于 2022-11-12 22:56:07 发布