1.要求在一组数中,插入一个新数,并维护原来的排序方式不变
<?php //1.要求在一组数中,插入一个新数,并维护原来的排序方式不变 function insertArr($arr,$val){ $pos=0; if (sizeof($arr)==0) return array($val); //传入数组没有值 if (sizeof($arr)==1){ //传入数组个数为1 return array($val,$arr[0]); } //分清排序 $bfind=false; if ($arr[0]>$arr[sizeof($arr) - 1]){ $bfind=true; //从大到小排序 }else{ $bfind=false;//从小到大排序 } for($i=0;$i<sizeof($arr);$i++){ //找到要插入值应该插入的位置。 if ($bfind){ if ($arr[$i]<$val){ $pos=$i; break; } }else{ if ($arr[$i]>$val){ $pos=$i; break; } } } $left_arr=array(); $right_arr=array(); for ($i=0;$i<sizeof($arr);$i++){ //根据要插入的值把数组分左右两部分。 if ($i<$pos){ $left_arr[]=$arr[$i]; }else{ $right_arr[]=$arr[$i]; } } return array_merge($left_arr,array($val),$right_arr); } //测试 $arr=array(); var_dump(insertArr($arr,10));echo "<br>"; $arr=array(1); var_dump(insertArr($arr,10));echo "<br>"; $arr=array(1,2,5,9,13,15); var_dump(insertArr($arr,10));echo "<br>"; $arr=array(40,15,12,9,8,1); var_dump(insertArr($arr,10));echo "<br>"; ?>
2.用二分法在一个数组中查找你所需元素(针对数字数组,返回值为下标)
<?php //二分法 function binarySearch($a, $val){ $low = 0; $high= count($a) - 1; while($low <= $high){ $mid = intval(($low+$high)/2); if($a[$mid] == $val) return $mid; //找到相等的就返回所在的位置 if($a[$mid] > $val){ //要查找的在前半截 $high = $mid - 1; }else{ $low = $mid + 1; //要查找的在后半截 } } return -1; } //测试 $arr=array(1,2,6,8,10); echo binarySearch($arr,6); ?>
3.打印杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
//规律
//第一行和第二行均为1
//从第三行开始,第一个和最后一个为1
//第二个位置的值为上一行的前一个位置的值和本位置正上方的值的和。
<?php function generationYanghui($num){ $arr=array(); for ($i=0;$i<$num;$i++){ $arr[$i]=array(); //第一行和第二行均为1 if ($i==0){ $arr[$i][0]=1; continue; } if ($i==1){ $arr[$i][0]=1; $arr[$i][1]=1; continue; }
//第三行的2等于第二行的第一个1加第一个1
for ($j=0;$j<=$i;$j++){ if ($j==0){ $arr[$i][$j]=1; continue; } if ($j==$i){ $arr[$i][$j]=1; continue; } $arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j]; } } return $arr; } //测试 $num=6; $arrYH = generationYanghui($num); for ($i=0;$i<sizeof($arrYH);$i++){ for($j=0;$j<sizeof($arrYH[$i]);$j++){ echo $arrYH[$i][$j] . " " ; } echo "<Br>"; } ?>
4.冒泡排序(统计一维数组)
<?php //冒泡排序(一维数组) function bubble_sort($arr){ //统计数组中个数 $count = count($arr); if ($count <= 0) return false; for($i=0; $i<$count; $i++){ for($j=$count-1; $j>$i; $j--){ if ($arr[$j] < $arr[$j-1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $tmp; } } } return $arr; } //测试 $_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4'); $_array = bubble_sort($_array); var_dump($_array); ?>