PHP算法锻炼,PHP常用算法实现

23 10 2012

PHP常用算法实现

Yinchiang | 0

冒泡排序

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;

}

均为转载,分享专用。

发表评论电子邮件地址不会被公开。 必填项已用*标注

评论

姓名 *

电子邮件 *

站点

评论审核已启用。您的评论可能需要一段时间后才能被显示。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值