Я пытаюсь реализовать бинарный поиск. Это мой код:
#!/usr/bin/perl
#use strict;
use warnings;
@array = (1..100);
$number = <STDIN>;
$low = 0;
$high = $#array;
while($low < $high){
print "Searcing $low ---- $high \n";
$mid = $low + ($high - $low)/2;
if($array[$mid] == $number){
print "Found in index:" . $mid;
last;
}
elsif($array[$mid] < $number){
$low = $mid + 1;
}
else{
$high = $mid - 1;
}
}
Но это не работает, хотя это прямая реализация (по крайней мере, это было бы на Java).
Кажется, что я получаю значения с плавающей запятой при делении и не могу искать. Если я предоставлю в качестве ввода 5
, я получу мусор:
5
Searcing 0 ---- 99
Searcing 0 ---- 48.5
Searcing 0 ---- 23.25
Searcing 0 ---- 10.625
Searcing 0 ---- 4.3125
Searcing 3.15625 ---- 4.3125
Как я могу использовать целые числа, чтобы я мог индексировать массив?
Также, если я раскомментирую use strict
, я получу следующие ошибки. Что они имеют в виду?
Global symbol "@array" requires explicit package name at D:\Development\Perl\chapter3\binarySearch.pl line 6.
Global symbol "$number" requires explicit package name at D:\Development\Perl\chapter3\binarySearch.pl line 9.
Global symbol "$low" requires explicit package name at