1. 冒泡排序
// 1.冒泡排序法 $array = [12,3,23,2,4,1,0]; function maoPao($arr){ //先判断是不是空数组 if(!empty($arr)){ $len = count($arr); for($i=0;$i<$len;$i++){ for($j=$i+1;$j<$len;$j++){ if($arr[$i]>$arr[$j]){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; } } } } return $arr; } print_r(maoPao($array));
2. 快速排序
$array = [12,3,23,2,4,1,0]; // 2.快速排序法 function quick_sort($arr){ if (count($arr) <= 1) return $arr; //这个判断必须加,不然报错,$left_arr和$right_arr就变成空数组了 $len = count($arr); $left_arr = array(); $right_arr = array(); for($i=1;$i<$len;$i++){ //$i一定要从1开始 if($arr[$i]<$arr[0]){ $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($arr[0]),$right_arr); //注意arr[0]要变成数组才不会出错 } print_r(quick_sort($array));
3.选择排序
1 //选择排序 2 function selectSort($arr) 3 { 4 $len = count($arr); 5 for($i=0;$i<$len;$i++){ 6 //获取但方法前值的索引 7 $minIndex = $i; 8 for($j=$i+1;$j<$len;$j++){ 9 if($arr[$j]<$arr[$minIndex]){ 10 $minIndex = $j; 11 } 12 } 13 if($i!=$minIndex){ 14 $tmp = $arr[$i]; 15 $arr[$i] = $arr[$minIndex]; 16 $arr[$minIndex] = $tmp; 17 } 18 } 19 return $arr; 20 } 21 22 $arr = [2,3,5,6,1,8,7,9,4]; 23 $res = selectSort($arr); 24 echo ' 原数组:'; 25 print_r($arr); 26 echo '<br>排序后的数组:'; 27 print_r($res);
4.插入排序
1 function insert($arr) { 2 $len = count($arr); 3 if($len<=1) return $arr; 4 for($i=1; $i<$len; $i++){ 5 for($j=$i; $j>0; $j--){ 6 if($arr[$j] < $arr[$j-1]){ 7 $tmp = $arr[$j]; 8 $arr[$j] = $arr[$j-1]; 9 $arr[$j-1] = $tmp; 10 }else{ 11 break; 12 } 13 } 14 } 15 return $arr; 16 }