1. 程式人生 > >【長期更新】 PHP題目

【長期更新】 PHP題目

 

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);
?>