摘要:下面分享一些最常見的算法,用如何實現(xiàn)。冒泡排序歸并排序二分查找遞歸二分查找非遞歸快速排序選擇排序插入排序
下面分享一些最常見的算法,用PHP如何實現(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22723.html
摘要:的介紹哈希表是實現(xiàn)字典操作的一種有效數(shù)據(jù)結(jié)構(gòu)。因此,實現(xiàn)一個好的哈希表的關(guān)鍵就是一個好的哈希函數(shù)和處理哈希沖突的方法。取而代之的是通過應(yīng)用哈希表的,然后只取哈希表的低位。由上面可以看到,的哈希表實現(xiàn)相當(dāng)復(fù)雜。 在PHP內(nèi)核中,其中一個很重要的數(shù)據(jù)結(jié)構(gòu)就是HashTable。我們常用的數(shù)組,在內(nèi)核中就是用HashTable來實現(xiàn)。那么,PHP的HashTable是怎么實現(xiàn)的呢?最近在看H...
摘要:學(xué)習(xí)完多線程之后可以通過下面這些問題檢測自己是否掌握,下面這些問題的答案以及常見多線程知識點的總結(jié)在這里??蛇x數(shù)據(jù)結(jié)構(gòu)與算法如果你想進(jìn)入大廠的話,我推薦你在學(xué)習(xí)完基礎(chǔ)或者多線程之后,就開始每天抽出一點時間來學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 35k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎Star: https://...
閱讀 3394·2021-11-22 13:53
閱讀 3434·2021-10-11 11:11
閱讀 945·2019-08-30 14:12
閱讀 1236·2019-08-29 17:16
閱讀 655·2019-08-29 16:45
閱讀 3365·2019-08-29 12:56
閱讀 682·2019-08-28 17:55
閱讀 2079·2019-08-26 13:24