注册 登录
编程论坛 Perl论坛

二分查找 假定查找序列是有序的整数

zhu224039 发布于 2014-06-10 17:42, 5539 次点击
墨迹了半天也没办法记住所有的语法  只好学以致用了,用来写个计算题 很屈perl
#!/usr/bin/perl -w
@rock=<STDIN>;
$max=<STDIN>;
$i=0;$j=$#rock;$m=0;
while($i<$j){
    if($max==$rock[0]){$m=0;print "Find!it is in 1 position!";last;}
    if($max==$rock[-1]){$m=$#rock;print "Find!it is in last position!";last;}
    $m=($i+$j)/2;
    if($max<$rock[$m]){
        $j=$m;
    }
    else{
        if($max==$rock[$m]){$m+=1;print "Find! it is in $m position";last;}
        if($max<$rock[$m+1]){last;}
        if($max==$rock[$m+1]){$m+=2;print "Find! it is in $m position";last;}
        $i=$m+1;
    }
}      
if($rock[$m]!=$max){print "the finder it is not in arrary";}
#1.判断要查找的数据是否在首尾  如果是 找到
#2.如果不是 则将查找序列一分为二,比较中间元素,如果小于则 尾巴变为中间元素的位置    如果不小于 则比较 中间元素和中间元素加1的元素 如果从中找到了相等的 那么找到了元素
#  如果不等且查找元素是小于中间元素的下一个元素则表示未找到
#  如果以上都不成立则表示查找元素是处在 中间元素的另一个区间的 那么叫头变成中间元素+1的地方
#重复上面的过程


[ 本帖最后由 zhu224039 于 2014-6-10 18:12 编辑 ]
0 回复
1