php 除不尽算法,常用算法PHP版

下面分享一些最常见的算法,用PHP如何实现。

冒泡排序

function bubble_sort($arr) {

$n=count($arr);

for($i=0;$i

for($j=$i+1;$j

if($arr[$j]

$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

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

$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

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

$k=$i;

for($j=$i+1;$j

if($arr[$j]

$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

$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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值