问题 3832 --找第n大的数(完善程序)

3832: 找第n大的数(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 111  解决: 67
[提交][状态][命题人:]

题目描述

给定一个长度为m<=1000000的无序正整数序列,以及另一个数n(1<=n<=1000000),接下来以类似快速排序的方法找到序列中第n大的数

关于第n大的数:例如序列{1,2,3,4,5,6}中第3大的数是4。

#include <iostream>
#include <stdlib.h>
using namespace std;
int a[1000001],n,ans = -1;
void swap(int &a,int &b)
{
	 int c;
	 c = a; a = b; b = c;
}
int FindKth(int left, int right, int n)
{
	 int tmp,value,i,j;
	 if (left == right) return left;
	 tmp = rand()% (right - left) + left;
	 swap(a[tmp],a[left]);
	 value =____(1)______       
	 i = left;
	 j = right;
	 while (i < j)
	 {
		  while (i < j && _____(2)_____) j--;
		  if (i < j) {a[i] = a[j]; i++;} else break;
		  while (i < j && _____(3)_____) i++;
		  if (i < j) {a[j] = a[i]; j--;} else break;
	 }
	 _____(4)_____        
	 if (i < n) return  FindKth(______(5)______);
	 if (i > n) return  ______(6)________                   
	 return i;
}

int main()
{
	 int i;
	 int m;
	 cin>>m;
	 for (i = 1;i <= m;i ++)
	  cin>>a[i];
	 cin>>n;
	 ans = FindKth(1,m,n);
	 cout<<a[ans];
	 return 0;
}


输入

输出

样例输入
Copy
6
5 2 3 4 6 1 
3
样例输出
Copy
4

提示

来源

[提交][状态]