摘要:下面分享一些最常見(jiàn)的算法,用如何實(shí)現(xiàn)。冒泡排序歸并排序二分查找遞歸二分查找非遞歸快速排序選擇排序插入排序
下面分享一些最常見(jiàn)的算法,用PHP如何實(shí)現(xiàn)。
冒泡排序
function bubble_sort($arr) {
$n=count($arr); for($i=0;$i<$n-1;$i++){ for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$i]) { $temp=$arr[$i]; $arr[$i]=$arr[$j]; $arr[$j]=$temp; } } } return $arr;
}
歸并排序
function Merge(&$arr, $left, $mid, $right) {
$i = $left; $j = $mid + 1; $k = 0; $temp = array(); while ($i <= $mid && $j <= $right) { if ($arr[$i] <= $arr[$j]) $temp[$k++] = $arr[$i++]; else $temp[$k++] = $arr[$j++]; } while ($i <= $mid) $temp[$k++] = $arr[$i++]; while ($j <= $right) $temp[$k++] = $arr[$j++]; for ($i = $left, $j = 0; $i <= $right; $i++, $j++) $arr[$i] = $temp[$j];
}
function MergeSort(&$arr, $left, $right) {
if ($left < $right) { $mid = floor(($left + $right) / 2); MergeSort($arr, $left, $mid); MergeSort($arr, $mid + 1, $right); Merge($arr, $left, $mid, $right); }
}
二分查找-遞歸
function bin_search($arr,$low,$high,$value) {
if($low>$high) return false; else { $mid=floor(($low+$high)/2); if($value==$arr[$mid]) return $mid; elseif($value<$arr[$mid]) return bin_search($arr,$low,$mid-1,$value); else return bin_search($arr,$mid+1,$high,$value); }
}
二分查找-非遞歸
function bin_search($arr,$low,$high,$value) {
while($low<=$high) { $mid=floor(($low+$high)/2); if($value==$arr[$mid]) return $mid; elseif($value<$arr[$mid]) $high=$mid-1; else $low=$mid+1; } return false;
}
快速排序
function quick_sort($arr) {
$n=count($arr); if($n<=1) return $arr; $key=$arr[0]; $left_arr=array(); $right_arr=array(); for($i=1;$i<$n;$i++) { if($arr[$i]<=$key) $left_arr[]=$arr[$i]; else $right_arr[]=$arr[$i]; } $left_arr=quick_sort($left_arr); $right_arr=quick_sort($right_arr); return array_merge($left_arr,array($key),$right_arr);
}
選擇排序
function select_sort($arr) {
$n=count($arr); for($i=0;$i<$n;$i++) { $k=$i; for($j=$i+1;$j<$n;$j++) { if($arr[$j]<$arr[$k]) $k=$j; } if($k!=$i) { $temp=$arr[$i]; $arr[$i]=$arr[$k]; $arr[$k]=$temp; } } return $arr;
}
插入排序
function insertSort($arr) {
$n=count($arr); for($i=1;$i<$n;$i++) { $tmp=$arr[$i]; $j=$i-1; while($arr[$j]>$tmp) { $arr[$j+1]=$arr[$j]; $arr[$j]=$tmp; $j--; if($j<0) break; } } return $arr;
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/22723.html
摘要:的介紹哈希表是實(shí)現(xiàn)字典操作的一種有效數(shù)據(jù)結(jié)構(gòu)。因此,實(shí)現(xiàn)一個(gè)好的哈希表的關(guān)鍵就是一個(gè)好的哈希函數(shù)和處理哈希沖突的方法。取而代之的是通過(guò)應(yīng)用哈希表的,然后只取哈希表的低位。由上面可以看到,的哈希表實(shí)現(xiàn)相當(dāng)復(fù)雜。 在PHP內(nèi)核中,其中一個(gè)很重要的數(shù)據(jù)結(jié)構(gòu)就是HashTable。我們常用的數(shù)組,在內(nèi)核中就是用HashTable來(lái)實(shí)現(xiàn)。那么,PHP的HashTable是怎么實(shí)現(xiàn)的呢?最近在看H...
摘要:學(xué)習(xí)完多線程之后可以通過(guò)下面這些問(wèn)題檢測(cè)自己是否掌握,下面這些問(wèn)題的答案以及常見(jiàn)多線程知識(shí)點(diǎn)的總結(jié)在這里??蛇x數(shù)據(jù)結(jié)構(gòu)與算法如果你想進(jìn)入大廠的話,我推薦你在學(xué)習(xí)完基礎(chǔ)或者多線程之后,就開(kāi)始每天抽出一點(diǎn)時(shí)間來(lái)學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識(shí)點(diǎn)以及面試問(wèn)題,已經(jīng)開(kāi)源,目前已經(jīng) 35k+ Star。會(huì)一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://...
摘要:項(xiàng)目源碼地址鏈接地址簡(jiǎn)單版框架特點(diǎn)單入口采用面向?qū)ο笏枷?,基于設(shè)計(jì)思想,使用觀察者,注冊(cè)器,工廠,代理,特性等模式開(kāi)發(fā)。提供一些常用類圖片分頁(yè)文件上傳驗(yàn)證碼等。提供常用的插件文件壓縮合并觀察等?;谕ㄟ^(guò)數(shù)組下標(biāo)訪問(wèn)配置文件。 項(xiàng)目源碼地址 鏈接地址(https://github.com/cxp1539/mi... Framework 簡(jiǎn)單版php框架 Framework特點(diǎn) 單入口i...
閱讀 3480·2021-11-22 13:53
閱讀 3527·2021-10-11 11:11
閱讀 1002·2019-08-30 14:12
閱讀 1310·2019-08-29 17:16
閱讀 746·2019-08-29 16:45
閱讀 3456·2019-08-29 12:56
閱讀 741·2019-08-28 17:55
閱讀 2154·2019-08-26 13:24