php的二分法插入排序过程:
1.首先,必须有一个有序序列的数组$arr,那么$low=0,$high=count($arr)-1,$middle=ceil(($high-$low)/2)。
2.将要插入的数与数组中间位置的元素进行比较,
如果比中间元素大,则$low=$mid+1作为下一次判断的数组开头。
如果比中间元素小,则$high=$mid-1作为下一次判断的数组结尾。
3.直到$low>$high结束,$low就是新元素插入的位置。
4.将数组中从$low开始的元素全部向后移动一位,之后在$low位置插入新元素。
function binsort(&$arr,$key){
$low=0;
$high=count($arr)-1;
while($low<=$high){
$m = $low +ceil(($high-$low)/2);
$mkey = $arr[$m];
if($key>=$mkey){
$low = $m + 1;
}else{
$high = $m - 1;
}
}
// 移动插入位置之后的元素,插入新元素
for($i=count($arr)-1; $i>=$low; $i--){
$arr[$i+1] = $arr[$i];
}
$arr[$low] = $key;
}
$arr=array('1','3','5','7','9');
$key=mt_rand(0,10);
binsort($arr,$key);
echo $key;
print_r($arr);