PHP遞歸效率分析
而且是差了3倍的效率。所以,PHP中的遞歸一定要小心的對待。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!
最近寫了一個快速排序的算法,發現PHP中的遞歸效率不能一刀切,在各種不同的服務器中,可能會表現不一樣。
複製代碼 代碼如下:
function qsort(&$arr)
{
_quick_sort($arr, 0, count($arr) - 1);
}
/**
* 採用遞歸算法的快速排序。
*
* @param array $arr 要排序的數組
* @param int $low 最低的排序子段
* @param int $high 最高的排序字段
*/
function _quick_sort(&$arr, $low, $high)
{
$low_data = $arr[$low];
$prev_low = $low;
$prev_high = $high;
while ($low < $high)
{
while ($arr[$high] >= $low_data && $low < $high) {
$high--;
}
if ($low < $high) {
$arr[$low] = $arr[$high];
$low++;
}
while ($arr[$low] <= $low_data && $low < $high) {
$low++;
}
if ($low < $high) {
$arr[$high] = $arr[$low];
$high--;
}
}
$arr[$low] = $low_data;
if ($prev_low < $low) {
_quick_sort($arr, $prev_low, $low);
}
if ($low + 1 < $prev_high) {
_quick_sort($arr, $low + 1, $prev_high);
}
}
function quick_sort(&$arr)
{
$stack = array();
array_push($stack, 0);
array_push($stack, count($arr) -1);
while (!empty($stack)) {
$high = array_pop($stack);
$low = array_pop($stack);
$low_data = $arr[$low];
$prev_low = $low;
$prev_high = $high;
while ($low < $high)
{
while ($arr[$high] >= $low_data && $low < $high) {
$high--;
}
if ($low < $high) {
$arr[$low] = $arr[$high];
$low++;
}
while ($arr[$low] <= $low_data && $low < $high) {
$low++;
}
if ($low < $high) {
$arr[$high] = $arr[$low];
$high--;
}
}
$arr[$low] = $low_data;
if ($prev_low < $low) {
array_push($stack, $prev_low);
array_push($stack, $low);
}
if ($low + 1 < $prev_high) {
array_push($stack, $low + 1);
array_push($stack, $prev_high);
}
}
}
下面是測試速度的`代碼:
複製代碼 代碼如下:
function qsort_test1()
{
$arr = range(1, 1000);
shuffle($arr);
$arr2 = $arr;
$t1 = microtime(true);
quick_sort($arr2);
$t2 = microtime(true) - $t1;
echo "非遞歸調用的花費:" . $t2 . "n";
$arr1 = $arr;
$t1 = microtime(true);
qsort($arr1);
$t2 = microtime(true) - $t1;
echo "遞歸調用的花費:" . $t2 . "n";
}
在我的IIS 服務器上(CGI)模式,我的測試結果是:
非遞歸調用的花費:0.036401009559631
遞歸調用的花費:0.053439617156982
在我的Apache 服務器上,我的測試結果是:
非遞歸調用的花費:0.022789001464844
遞歸調用的花費:0.014809131622314
結果完全相反,而PHP的版本是一樣的。
看來對遞歸的效率要具體問題具體分析了。</p
-
php如何基於dom實現圖書xml格式數據
導語:php如何基於dom實現圖書xml格式數據呢?下面是小編給大家提供的代碼實現方法,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。<?php$doc=newDOMDocument();$doc->load('');$books=$doc->getElementsByTagName("book");foreach($booksas$book){$aut...
-
PHP的基本語法介紹
PHP的基本語法和C是很相似的,可以説大部分編程語言的基本語法都是如出一轍的:順序、選擇(if)、循環(while)。以下是本站小編搜索整理的關於PHP的基本語法介紹,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!打開記事本,編寫以下程序...
-
PHP常用函數總結
PHP的常用函數有哪些呢?下面是由本站小編為大家整理的PHP常用函數總結,喜歡的可以收藏一下!瞭解更多詳情資訊,請關注應屆畢業生考試網!數學函數():求絕對值$abs=abs(-4.2);//4.2數字絕對值數字():進一法取整echoceil(9.999);//10浮點數進一取整r():捨去法取整ech...
-
對PHP語言認識上要避免10大誤區
PHP是一種非常流行的開源服務器端腳本語言,你在萬維網看到的大多數網站都是使用php開發的。但是,你大概很奇怪的注意到有少部分的人發誓要離php遠遠的。但是令人更奇怪的是或者很震驚的説他們不用php並不是因為一些被證實的語言缺點。他們決定不用php,是因為誤解...