首页 > 试题广场 >

(找第k大的数)给定一个长度为1000000的无序正整数序列

[填空题]
(找第k大的数)给定一个长度为1000000的无序正整数序列,以及另一个数n(1<=n<=1000000),接下来以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3大的数是4)
var
  a : array[1..1000000] of integer;
  n, m, ans : integer;
procedure swap(var a, b : integer);
var
  t : integer;
begin
  if  (a <> b) then
  begin
    t := a;
    a := b;
    b := t;
  end;
end;
function FindKth(left, right, n : integer) : integer;
var
  tmp, value, i, j : integer;
begin
  if left = right then exit(left);
  tmp := random(right - left) + left;
  swap(a[tmp], a[left]);
  value := 1
          i:=left;
  j := right;
  while i < j do
  begin
    while (i < j) and (2) do dec(j);
    if i < j then
    begin
      a := a[j];
      inc(i);
    end else break;
    while (i < j) and (3) do inc(i);
    if i < j then
    begin
      a[j] := a[i];
      dec(j);
    end else break;
  end;
  4
  if i<n then begin inc(i);
  exit(FindKth(5));
end;
if i>n then
begin
  dec(j);
  exit(6);
end;
exit(i);
end;
var i :integer;
begin
randomize;
ans:=-1;
m:=5;
for i:=1 to m do
read(a[i]);
read(n);
ans:=FindKth(1,m, n);
writeln(a[ans]);
end.

这道题你会答吗?花几分钟告诉大家答案吧!