Cet article présente principalement les algorithmes de tri courants en php. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
//1. Tri à bulles
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. Tri par fusion
//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.
//4. Recherche binaire - non récursive//二分查找-递归 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));
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; }
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; }
Recommandations associées :
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; }
Partage d'exemples d'algorithme PHP pour convertir des URL en URL courtes
PHP implémente l'écriture de classes PDO basées sur la méthode du mode singleton
Méthode PHP pour implémenter des secondes formatées basées sur une fonction personnalisée
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!