#!/usr/local/bin/ruby
# -*- mode: ruby -*-
# $Id: heapsort.ruby,v 1.7 2001/05/08 02:46:59 doug Exp $
# http://www.bagley.org/~doug/shootout/
IM = 139968
IA = 3877
IC = 29573
$last = 42.0
def gen_random (max) (max * ($last = ($last * IA + IC) % IM)) / IM end
def heapsort(n, ra)
j = i = rra = 0
l = (n >> 1) + 1
ir = n
while (1) do
if (l > 1) then
rra = ra[(l -= 1)]
else
rra = ra[ir]
ra[ir] = ra[1]
if ((ir -= 1) == 1) then
ra[1] = rra
return
end
end
i = l
j = l << 1
while (j <= ir) do
if ((j < ir) and (ra[j] < ra[j+1])) then
j += 1
end
if (rra < ra[j]) then
ra[i] = ra[j]
j += (i = j)
else
j = ir + 1
end
end
ra[i] = rra
end
end
N = Integer(ARGV.shift || 1)
ary = []
for i in 1 .. N
ary[i] = gen_random(1.0)
end
heapsort(N, ary)
printf "%.10f\n", ary[N]