當前位置:學者齋 >

計算機 >php語言 >

php經典演算法介紹

php經典演算法介紹

PHP,一個巢狀的縮寫名稱,是英文超級文字預處理語言(PHP:HypertextPreprocessor)的縮寫。PHP是一種HTML內嵌式的語言,PHP與微軟的ASP頗有幾分相似,都是一種在伺服器端執行的嵌入HTML文件的指令碼語言,語言的風格有類似於C語言,現在被很多的.網站程式設計人員廣泛的運用。php經典演算法介紹分享給大家,歡迎大家閱讀!

php經典演算法介紹
php經典演算法介紹

  1、氣泡排序,C裡基礎演算法,從小到大對一組數排序。

思路:這題從小到大,第一輪排最小,第二輪排第二小,第三輪排第三小,依次類推……

<?php

$arr=array(3,2,1);

$n=count($arr);

//每迴圈一次,就跑一趟後面的排序

for($j=0;$j<$n-1;$j++){

//對後面沒排好的,迴圈查找出最大(最小)的,進行一趟排序

for($i=$j;$i<$n-1;$i++){

if($arr[$j]>$arr[$i+1]){

$t=$arr[$j];

$arr[$j]=$arr[$i+1];

$arr[$i+1]=$t;

}

}

}

print_r($arr);

  2、牛年求牛:有一母牛,到4歲可生育,每年一頭,所生均是一樣的母牛,到15歲絕育,不再能生,20歲死亡,問n年後有多少頭牛。(來自論壇)

<?php

functiont($n){

static$num=1

for($j=1;$j<=$n;$j++){

if($j>=4&&$j<15){$num++;t($n-$j);}

if($j==20){$num--;}

}

return$num;

}

//test

echot(8);

  3、楊輝三角,用PHP寫。

思路:每一行的第一位和最後一位是1,沒有變化,中間是前排一位與左邊一排的和,這種演算法是用一個二維陣列儲存,另外有種演算法用一維陣列也可以實現,一行一行的輸出,有興趣去寫著玩下。

1

11

121

1331

14641

15101051

<?php

//每行的第一個和最後一個都為1,寫了6行

for($i=0;$i<6;$i++){

$a[$i][0]=1;

$a[$i][$i]=1;

}

//出除了第一位和最後一位的值,儲存在陣列中

for($i=2;$i<6;$i++){

for($j=1;$j<$i;$j++){

$a[$i][$j]=$a[$i-1][$j-1]+$a[$i-1][$j];

}

}

//列印

for($i=0;$i<6;$i++){

for($j=0;$j<=$i;$j++){

echo$a[$i][$j].'';

}

echo'

';

}

  4、在一組數中,要求插入一個數,按其原來順序插入,維護原來排序方式。

思路:找到比要插入數大的那個位置,替換,然後把後面的數後移一位。

<?php

$in=2;

$arr=array(1,1,1,3,5,7);

$n=count($arr);

//如果要插入的數已經最大,直接列印

if($arr[$n-1]<$in){

$arr[$n+1]=$in;print_r($arr);

}

for($i=0;$i<$n;$i++){

//找出要插入的位置

if($arr[$i]>=$in){

$t1=$arr[$i];

$arr[$i]=$in;

//把後面的資料後移一位

for($j=$i+1;$j<$n+1;$j++){

$t2=$arr[$j];

$arr[$j]=$t1;

$t1=$t2;

}

//列印

print_r($arr);

die;

}

}

  5、對一組數進行排序(快速排序演算法)。

思路:通過一趟排序分成兩部分,然後遞迴對這兩部分排序,最後合併。

<?php

functionq($array){

if(count($array)<=1){return$array;}

//以$key為界,分成兩個子陣列

$key=$array[0];

$l=array();

$r=array();

//分別進行遞迴排序,然後合成一個數組

for($i=1;$i<count($array);$i++){

if($array[$i]<=$key){$l[]=$array[$i];}

else{$r[]=$array[$i];}

}

$l=q($l);

$r=q($r);

returnarray_merge($l,array($key),$r);

}

$arr=array(1,2,44,3,4,33);

print_r(q($arr));

 6、在一個數組查詢你所需元素(二分查詢演算法)。

思路:以陣列中某個值為界,再遞迴進行查詢,直到結束。

<?php

functionfind($array,$low,$high,$k){

if($low<=$high){

$mid=intval(($low+$high)/2);

if($array[$mid]==$k){

return$mid;

}elseif($k<$array[$mid]){

returnfind($array,$low,$mid-1,$k);

}else{

returnfind($array,$mid+1,$high,$k);

}

}

die('Nothave...');

}

//test

$array=array(2,4,3,5);

$n=count($array);

$r=find($array,0,$n,

  7、合併多個數組,不用array_merge(),題目來於論壇。

思路:遍歷每個陣列,重新組成一個新陣列。

<?php

functiont(){

$c=func_num_args()-1;

$a=func_get_args();

//print_r($a);

for($i=0;$i<=$c;$i++){

if(is_array($a[$i])){

for($j=0;$j<count($a[$i]);$j++){

$r[]=$a[$i][$j];

}

}else{

die('Notaarray!');

}

}

return$r;

}

//test

print_r(t(range(1,4),range(1,4),range(1,4)));

echo'

';

$a=array_merge(range(1,4),range(1,4),range(1,4));

print_r($a);

標籤: PHP 演算法
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/jsj/php/go4d0l.html