关闭

数组中第k小的数

180人阅读 评论(0) 收藏 举报
分类:
/**
 * 选取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));
	}
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:68566次
    • 积分:3669
    • 等级:
    • 排名:第8853名
    • 原创:312篇
    • 转载:3篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论