第X个大的数(快排)

原创 2018年04月16日 19:55:50


第X大的数

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

X最近爱上了区间查询问题,给出N (N <= 100000) 个数,然后进行M (M <= 5) 次询问,每次询问时,输入一个数X (1 <= X <= N),输出N个数中第X大的数。

Input

多组输入。

每组首先输入一个整数N,代表有N个数,下面一行包含N个整数,用空格隔开。然后为一个整数M,代表有M次询问,下面的M行,每行一个整数X。

Output

输出N个数中第X大的数。

Sample Input

4
1 2 2 3
4
1
2
3
4

Sample Output

3
2
2
1

Hint

Source

#include<stdio.h>
int a[100000];
void sort(int l,int r){
int x1=a[l];
int i=l,j=r;
while(i<j){
while(i<j&&x1>=a[j])j--;
a[i]=a[j];
while(i<j&&x1<=a[i])i++;
a[j]=a[i];

}
a[i]=x1;//确定了x1的位置
if(l<r){
sort(l,i-1);//前半部分的再一次快排
sort(i+1,r);//后半部分


}
}
int main(){
int n,m,i,j,k,t,x;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(0,n-1);
scanf("%d",&m);
while(m--){
scanf("%d",&x);
printf("%d\n",a[x-1]);
}
}



}
快速排序如图所示:

Python全栈工程师-第1周

-
  • 1970年01月01日 08:00

快排的思想求第K小的数

描述 输入N个数,M次查询。 每次查询给出一个数x。   要求:每次查询输出前x个数中第i小的数。(i为第i次查询) 你可以假设M  ,Xi 输入Line0:T Line1: N,M L...
  • liuzhan214
  • liuzhan214
  • 2016-07-13 15:54:01
  • 170

寻找第K大的数(快排思想)

使用快排思想找第K大的数,算法复杂度O(n)。1.以数组a的第0位a[0]为参考基准base,将数组划分为两个部分; 如果找第K大的数,则将大于base的数往前挪,将小于base的数往后挪。如果找第...
  • yingyujianmo
  • yingyujianmo
  • 2016-04-15 22:27:19
  • 3955

快速排序 求第k大数

1. 快排利用标兵的思想,但每一次都是比较范围大小,没有精确排序。 2. 同样适用于快速求解 需要定性的范围问题,例如:第k大(将前后定性大小,但不用排序). 3. 求解第k大:通过判断下标,只计算有...
  • cFarmerReally
  • cFarmerReally
  • 2016-08-04 22:13:36
  • 9867

快排算法及利用快排思想寻找第k大(小)的数

#include #include using namespace std; void Swap(int &a, int &b) { int p = a; a = b; b = p; } ...
  • u010312436
  • u010312436
  • 2016-06-29 18:14:27
  • 1903

快排求第K大的数O(n)

关于各类排序的详细说明 #include #include #include #include #include #include #include #include #include #i...
  • u014679804
  • u014679804
  • 2015-08-20 19:30:22
  • 647

用快速排序的思想求第K大的数或最大的k个数

#include    using namespace std;   template class T>   int quick2_sort(T a[],int low,int high)   ...
  • guangwen_lv
  • guangwen_lv
  • 2014-09-29 19:26:03
  • 2339

快速排序求第k小的数

快速排序求第k小的数,思想非常简单,就是如果要查找的k比当前下标low小,则只递归左部分,大则递归右部分,相等则递归右部分,当然由于数组下标从0开始,所以应该是k-1,(比如第一大的数数组下标为0),...
  • fengsigaoju
  • fengsigaoju
  • 2016-02-24 10:56:45
  • 1217

寻找无序数组中第k大的数——快排思想

找数组中第k大的数,避免o(n2)时间,考虑快排方法。 #include #include using namespace std; int random_partion(int *p,i...
  • caocjiajia
  • caocjiajia
  • 2017-10-18 20:31:30
  • 165

寻找第k大数(快排思想)

剔除了相同的数,快排是从小到大排序的,所以k做了处理。 #include #include using namespace std; int hash[20000005]={0}; int A[...
  • immiao
  • immiao
  • 2013-12-04 20:21:56
  • 770
收藏助手
不良信息举报
您举报文章:第X个大的数(快排)
举报原因:
原因补充:

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