这一个多月也顺带看了一些C语言的数据结构的书,感觉受益匪浅,重写了部分代码转成perl版本,数组必须是有序的:
my @a;
sub binarySearch() #二分查找
{
my ($low, $high, $key) = @_;
while($low <= $high)
{
my $mid = int(($low + $high) / 2);
if($key < $a[$mid])
{
$high = $mid - 1;
}elsif($key > $a[$mid]){
$low = $mid + 1;
}else{
return $mid;
}
}
return 0;
}
sub interpolationSearch() #插值查找,不适于极端不均匀数据
{
my ($low, $high, $key) = @_;
while($low <= $high)
{
my $mid = int($low + ($high - $low)*($key - $a[$low]) / ($a[$high] - $a[$low]));
if($key < $a[$mid])
{
$high = $mid - 1;
}elsif($key > $a[$mid]){
$low = $mid + 1;
}else{
return $mid;
}
}
return 0;
}