PHP常见算法
2021-09-20
2 min read
PHP常见算法
冒泡排序
function dubbleSort($arr)
{
$length = count($arr);
if ($length == 1) return $arr;
for ($i = 0; $i < $length; $i++) {
$isOver = false
for ($j = 0; $j < $length - $i - 1; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
$isOver = true;
}
}
if (!$isOver) {
break;
}
}
return $arr;
}
选择排序
function selectSort($arr)
{
$len = count($arr);
for($i = 0;$i<$length -1;$i++){
$min = $i;
for($j = $i + 1;$j<$length;$j++){
if($arr[$j] < $arr[$i]){
$min = $j;
}
}
if($i != $min){
$temp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $temp;
}
}
return $arr;
}
快速排序
function quickSort($arr)
{
if(count($arr) <= 1) return $arr;
$mid = $arr[0];
$left = [];
$right = [];
for($i = 1;$i<count($arr);$i++){
if($arr[$i] > $mid){
$right[] = $arr[$i];
}else{
$left[] = $arr[$i];
}
}
$left = quickSort($left);
$right = quickSort($right);
return array_merge($left,[$mid],$right);
}
插入排序
function insertSort($arr)
{
$length = count($arr);
for ($i = 1; $i < $length; $i++) {
$pos = $i;
$key = $arr[$i];
while ($pos > 0 && $arr[$pos - 1] > $key) {
$arr[$pos] = $arr[$pos - 1];
$pos = $pos - 1;
}
$arr[$pos] = $key;
}
return $arr;
}
二分查找
function search($arr, $target)
{
return recursion(&$arr, 0, count($arr) - 1, $target);
}
function recursion($arr, $l, $r, $tarfet)
{
$mid = intval(($l + $r) / 2);
if ($l > $r) return -1;
if ($target > $arr[$mid]) {
return recursion($arr, $arr[$mid] + 1, $r, $tarfet);
} elseif ($target < $arr[$mid]) {
return recursion($arr, $l, $arr[$mid] - 1, $tarfet);
} else {
return $mid;
}
}
字符串反转
function str_rev($str)
{
$i = 0;
while(1){
if(!isset($str)){
break;
}
$i++;
}
for($j = $i -1;$j>=0;$j--){
$temp .= $str[$j];
}
return $temp;
}