题目描述
给你一个长度为n的序列,求序列中第k小数的多少。
输入描述:
多组输入,第一行读入一个整数T表示有T组数据。
每组数据占两行,第一行为两个整数n,k,表示数列长度和k。
第二行为n个用空格隔开的整数。
输出描述:
对于每组数据,输出它的第k小数是多少。
每组数据之间用空格隔开
题解: 使用递归的方法 , 使用中点 比较左右的两个 与K相比
int a[1000];
int finding(int l,int r, int k){
// 当只有一个数字的时候
if (l==r)
{
return a[l];
}
int i=l, j = r;
int mid = (l+r)/2;
int x = a[mid];
while (i<=j)
{
while (a[i]<x)
{
i++;
}
while (a[j]>x)
{
j--;
}
if (i<=j)
{
swap(a[i],a[j]);
i++;j--;
}
}
if (k<=j)
{
return finding(l,j,k);
}else if (i<=k)
{
return finding(i,r,k);
}else{
return a[k];
}
}