A5下载文章资讯

分类分类

PHP版本常用的排序算法汇总

2015-12-21 09:39作者:fang

//1、冒泡排序

function bubble_sort($arr){

$n = count($arr);

for($i=0;$i<$n-1;$i++){

for($j=$i+1;;$j<$n-$i;$j++){

if($arr[$j]<$arr[$i]){

$temp = $arr[$i];

$arr[$i] = $arr[$j];

$arr[$j] = $temp;

}

}

}

}

//2、归并排序

//merge函数将指定的两个有序数组(arr1arr2,)合并并且排序

//我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据

function al_merge($arrA, $arrB)

{

$arrC = array();

while (count($arrA) && count($arrB)) {

//这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值,

//不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用

$arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);

}

return array_merge($arrC, $arrA, $arrB);

}

//归并排序主程序

function al_merge_sort($arr)

{

$len = count($arr);

if ($len <= 1) {

return $arr; //递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组

}

$mid = intval($len / 2); //取数组中间

$left_arr = array_slice($arr, 0, $mid); //拆分数组0-mid这部分给左边left_arr

$right_arr = array_slice($arr, $mid); //拆分数组mid-末尾这部分给右边right_arr

$left_arr = al_merge_sort($left_arr); //左边拆分完后开始递归合并往上走

$right_arr = al_merge_sort($right_arr); //右边拆分完毕开始递归往上走

$arr = al_merge($left_arr, $right_arr); //合并两个数组,继续递归

return $arr;

}

$arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9);

print_r(al_merge_sort($arr));

//3、二分查找-递归

//二分查找-递归

function bin_search($array,$low,$high,$k){

if($low <= $high){

$mid = intval(($low+$high)/2);

}else{

return false;

}

if($array[$mid] == $k){

return $mid;

}elseif($k < $array[$mid]){

return bin_search($array,$low,$mid-1,$k);

}else{

return bin_search($array,$mid+1,$high,$k);

}

}

$arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9);

$index = bin_search($arr,0,10,12); //直接输出为空,不解

echo(intval($index));

//4、二分查找-非递归

function bin_search($arr,$low,$high,$value) {//$arr 数组; $slow 最小索引; $high 最大索引 $value 查找的值

while($low<=$high) {

$mid=intval(($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;

}

以上就是本文章的内容,希望对大家有所帮助

展开全部

相关

说两句网友评论
    我要跟贴
    取消