二分查找 假定查找序列是有序的整数
墨迹了半天也没办法记住所有的语法 只好学以致用了,用来写个计算题 很屈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 编辑 ]