数组中第k小的数

原创 2015年07月06日 16:57:32
/**
 * 选取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小的数(或者找到最小的K个数)

题目:在一个很大的无序数组中用最快的速度找到第K小的数(或者找到最小的前K个数)。(类似于,在一个有1000000个数的数组中找到最小的100个数)对于这个问题首先想到的可能是把这个数组进行按从小到大...
  • wangbingcsu
  • wangbingcsu
  • 2016年04月25日 12:15
  • 3485

在O(n)时间内查找数组内第k小的数

前一阵子做作业,看到了这个,要求在 O(n) 时间内查找前 k 小的 k 个数,给出的提示是,先在 O(n) 时间内查找到第 k 小的数.由此想到,此前一直用的 sort 函数,排完序后找下标为 k-...
  • pku_Coder
  • pku_Coder
  • 2016年12月01日 13:02
  • 310

利用快排思想寻找数组中第K大(小)的数字

利用快排的思想寻找数组中第K大(小)的数字。举例:给定一个整数数组num,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。如输入数组[1,3,5,2,2],5,3,返回...
  • u012050154
  • u012050154
  • 2016年11月17日 09:59
  • 884

写一段程序,找出数组中第k大小的数,输出数所在的位置。

基本上是利用排序思想,稍微改造以适应这种需求。比如最简单的冒泡排序,冒泡到第k次时就找到了这个数(需要提前缓存原始索引位置);快速排序的思想,把数组分割成大于和小于某值的两部分后,判断每部分的元素个数...
  • qiaoquan3
  • qiaoquan3
  • 2016年05月17日 15:18
  • 990

算法导论:快速找出无序数组中第k小的数

题目描述: 给定一个无序整数数组,返回这个数组中第k小的数。 解析: 最平常的思路是将数组排序,最快的排序是快排,然后返回已排序数组的第k个数,算法时间复杂度为O(nlogn),空间复杂度为O(...
  • tham_
  • tham_
  • 2015年03月29日 14:34
  • 2071

经典算法题:无序整数数组中找第k大的数

经典问题:写一段程序,找出数组中第k大的数,输出数所在的位置。 【解法一】先排序,然后输出第k个位置上的数 我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速...
  • wangbaochu
  • wangbaochu
  • 2016年10月27日 21:02
  • 4105

从n个元素中找出第K小的数 利用快排的思想来实现

从n个无序的顺序表中找出第k小的数,采用快排思想: 先从n个元素中随便寻找一个数m作为分界点,m在列表中的位置为i 当 i = k时,m就是我们要寻找的第k小的数; 当 i > k时,我们就从1~i-...
  • a15994269853
  • a15994269853
  • 2014年03月19日 21:14
  • 3515

求数组中第K大的数

使用快排,第一趟快排过后,右边的元素都比枢轴大,左边的都比枢轴小。当我们要求第K大的数,只需要左边的元素个数是len-k,len是数组总长度。 第一次快排下来,设枢轴位置是mid,如果mid>k,说...
  • liang0000zai
  • liang0000zai
  • 2015年06月25日 15:52
  • 840

面试题-找出数组中第k大小的数,输出数所在的位置

这个是我碰到的一个面试题。 因为我C++用得比较
  • yan532200
  • yan532200
  • 2014年11月16日 22:16
  • 1143

java 寻找数组中第k大的值

1.排序 public static int findKthLargest(int[] nums, int k) { Arrays.sort(nums); ret...
  • hzh_csdn
  • hzh_csdn
  • 2016年12月03日 17:25
  • 2831
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组中第k小的数
举报原因:
原因补充:

(最多只允许输入30个字)