2013-04-10 12:38:42 -07:00
|
|
|
sub binary_search {
|
2016-12-05 22:15:40 +01:00
|
|
|
my ($array_ref, $value, $left, $right) = @_;
|
|
|
|
|
while ($left <= $right) {
|
|
|
|
|
my $middle = int(($right + $left) >> 1);
|
|
|
|
|
if ($value == $array_ref->[$middle]) {
|
|
|
|
|
return $middle;
|
|
|
|
|
}
|
|
|
|
|
elsif ($value < $array_ref->[$middle]) {
|
|
|
|
|
$right = $middle - 1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$left = $middle + 1;
|
|
|
|
|
}
|
2013-04-10 12:38:42 -07:00
|
|
|
}
|
2016-12-05 22:15:40 +01:00
|
|
|
return -1;
|
2013-04-10 12:38:42 -07:00
|
|
|
}
|