嗯。。就是在快排的时候不去管另外一边
然后没什么了。。
用的是算法导论上的代码。。
var a:Array[0..10000000] of longint;
step,n,i,j,k:longint;
procedure swap(var a,b:longint);
begin
step:=a;
a:=b;
b:=step;
end;
function partition(left,right:longint):longint;
var i,x,j:longint;
begin
swap(a[(left+right) shr 1],a[right]);
x:=a[right];
i:=left-1;
for j:=left to right-1 do
begin
if a[j]<x then begin
inc(i);
swap(a[i],a[j]);
end;
end;
swap(a[i+1],a[right]);
exit(i+1);
end;
function FindKth(left,right:longint):longint;
var i,j:longint;
begin
if (left=right) then exit(a[left]);
i:=partition(left,right);
if (k=i) then exit(a[i])
else if (i>k) then exit(FindKth(left,i-1))
else exit(FindKth(i+1,right));
end;
begin
readln(n,k);
for i:=1 to n do readln(a[i]);
writeln(FindKth(1,n));
end.