This article mainly introduces common sorting algorithms in php. Interested friends can refer to it. I hope it will be helpful to everyone.
//1. Bubble sort
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 sort
//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. Binary search-recursive
//二分查找-递归 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. Binary search - non-recursive
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. Quick sort
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. Selection sort
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. Insertion sort
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; }
Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.
Related recommendations:
PHP algorithm example sharing for converting URLs into short URLs
PHP implements writing PDO classes based on singleton mode Method
PHP method to implement formatting seconds based on custom function
The above is the detailed content of Common sorting algorithms in php. For more information, please follow other related articles on the PHP Chinese website!