Download | Plain Text | Line Numbers
#!/usr/bin/perl
use POSIX qw(ceil floor);
use strict;
use Data::Dumper;
my @a = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
#my @a = (0, 1, 2);
sub expSearch
{
my ($a, $l, $r, $k) = @_;
print "left=$l, right=$r", $/;
if ($k < $a[$l] || $k > $a[$r])
{
print "not found1", $/;
return;
}
if ($a[$l] == $k)
{
print "found2=", $l, $/;
return;
}
my $i = 1;
while($l+$i < $r && $k > $a[$l+$i])
{
$i = 2*$i;
}
if (($l+$i) > $r)
{
print "a2[", $l+floor($i/2), "...", $r, "]", $/;
return expSearch($a, $l+floor($i/2), $r, $k);
}
print $l+$i, $/;
if ($k == $a[$l+$i])
{
print "found=", $l+$i, $/;
return;
}
print "a1[", $l+floor($i/2), "...", $l+$i, "]", $/;
return expSearch($a, $l+floor($i/2), $l+$i, $k);
}
print scalar(@a), $/;
expSearch(\@a, 0, scalar(@a)-1, $ARGV[0]);