PHP五種常見演算法

2021-08-15 07:01:39 字數 2568 閱讀 5345

氣泡排序:

<?php

/** * created by phpstorm.

* user: maguanya

* date: 2018/1/9

* time: 下午1:38

* 氣泡排序

*/function bubble($arr)

$len = count($arr);

if ($len <= 1)

for ($i=1; $i<$len; $i++) }}

return $arr;

}// 先定義乙個陣列

$arr = ['9', '2', '4', '1', '7', '3', '5', '8'];

$fun = bubble($arr);

var_dump($fun);

快速排序:

<?php

/** * created by phpstorm.

* user: maguanya

* date: 2018/1/11

* time: 下午2:23

* 快速排序

* 全部的數都和陣列的第乙個數作比較,比第乙個數字小的放到乙個空陣列裡面,比第乙個數字大的放到另乙個空陣列裡面,

* 因為都是和第乙個數字進行判斷的,所以是從陣列的下表為1的開始迴圈的,並且迴圈次數是陣列長度減1,

* 然後再進行遞迴呼叫自身,知道長度為1或0

*/function quick($arr)

$left = $right = ; //定義兩個空陣列

for ($i=1; $i<$len; $i++) else

}$left = quick($left);

$right = quick($right);

print_r($right);

return array_merge($left,array($arr[0]),$right);

}$arr = ['9', '2', '4', '1', '7', '3', '5', '8'];

$res = quick($arr);

var_dump($res);

選擇排序:

<?php

/** * created by phpstorm.

* user: maguanya

* date: 2018/1/12

* time: 下午2:08

* 選擇排序

* 外層的迴圈是陣列長度是幾就迴圈多少次,內層的迴圈是永遠比上一次的迴圈次數少一次,

* 排序規則:先拿陣列的第乙個元素依次作比較,迴圈出最大或最小的元素,

* 然後進行放到需要迴圈的這幾個元素的最後乙個位置,

* 所以放到最後的就不會做比較

*/function select($arr)}}

return $arr;

}$arr = ['9', '2', '4', '1', '7', '3', '5', '8'];

$res = select($arr);

var_dump($res);

折半查詢:

<?php

/** * created by phpstorm.

* user: maguanya

* date: 2018/1/12

* time: 下午2:43

* 折半查詢

* $arr:要查詢的陣列;$val:要查詢的值

*///遞迴方式

function bin_recur_search($arr,$val)elseif($arr[$mid] > $val)else

}return '未找到'.$val;

}//非遞迴方式

function bin_search($arr,$val)elseif($val > $arr[$mid])else}}

return '未找到'.$val;

}$arr = ['9', '2', '4', '1', '7', '3', '5', '8'];

echo '遞迴方式結果:'.'

'.bin_recur_search($arr, 2);

echo '

';echo '非遞迴方式結果:'.'

'.bin_search($arr, 2);

斐波那且數列:

<?php

/** * created by phpstorm.

* user: maguanya

* date: 2018/1/13

* time: 上午10:26

* 斐波那且數列

*///顯示陣列

function fib($n)

return $array;

}//顯示斐波那且數列中第$n個數的值

function fib_recursive($n)else

}var_dump(fib(10));

echo '

';echo fib_recursive(3);

五種常見的 PHP 設計模式

設計模式對於每個人都非常有用 本片博文 自 觀察者模式為您提供了避免元件之間緊密耦合的另一種方法。該模式非常簡單 乙個物件通過新增乙個方法 該方法允許另乙個物件,即 觀察者 註冊自己 使本身變得可觀察。當可觀察的物件更改時,它會將訊息傳送到已註冊的觀察者。這些觀察者使用該資訊執行的操作與可觀察的物件...

php 陣列合併 五種常見陣列排序演算法

氣泡排序演算法思路 比較相鄰的兩個陣列元素,如果第乙個比第二個大,則交換兩個的值 對每一對相鄰元素做同樣的工作,從開始第一對比較到最後一對,最後的元素應該是最大值 針對所有元素重複以上步驟,除了最後乙個 針對越來越少的元素重複以上步驟,直至沒有任何一對數字比較 實現 氣泡排序 arr array 4...

演算法 1 五種常見的演算法思想簡述

遞迴 遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫 函式 或過程 來表示問題的解。暴力 暴力求解就是根據問題的描述和定義直接求解,不使用特殊的演算法。動態規劃 動態規劃演算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每乙個解都對應於乙個值,我們希望找...