常见查找和排序算法(PHP实现)

来源:互联网 发布:tcp 端口多连接 编辑:程序博客网 时间:2024/05/18 00:48

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

1、冒泡排序

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

2、归并排序

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);  }}

3、二分查找-递归

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);    }}

4、二分查找-非递归

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

5、快速排序

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);}

6、选择排序

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

7、插入排序

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;}
原创粉丝点击