这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程。
充效率看
冒泡排序法<选择排序法<插入排序法 排序分两大类:
内部排序法
交换式排序法
冒泡法
基本思想:
案例:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//简单的
$arr=array(0,5,-1); //现在我们把函数毛片封装成函数,利用以后使用 //数组默认传递的是值,不是地址,&是地址符 function bubble(&$myarr){ //这是一个中间变量 $temp=0; //我们要把数组从小到大 //外层循环 for($i=0;$i<count($myarr)-1;$i++){ for($j=0;$j<count($myarr)-1-$i;$j++){ //说明前面的数比后面的数大,就要交换 if($myarr[$j]>$myarr[$j+1]){ $temp=$myarr[$j]; $myarr[$j]=$myarr[$j+1]; $myarr[$j+1]=$temp; } } } } //使用函数去排序 bubble($arr); //输出 print_r($arr); |
分析图
选择排序法
示意图
案例
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//选择排序法
function selectSort(&$arr){ //定义中间变量 $temp=0; for($i=0;$i<count($arr)-1;$i++){ //假设$i就是最小的数 $minVal=$arr[$i]; //记录我认为的最小数的下标 $minIndex=$i; for($j=$i+1;$j<count($arr);$j++){ //说明我们认为的最小值,不是最小 if($minVal>$arr[$j]){ $minVal=$arr[$j]; $minIndex=$j; } } //最后交换 $temp=$arr[$i]; $arr[$i]=$arr[$minIndex]; $arr[$minIndex]=$temp; } } |
流程图
插入排序法
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
//插入排序法
function insertSort(&$arr){ //先默认下标为0,这个数已经是有序 for($i=1;$i<count($arr);i++){ //$insertVal是准备插入的数 $insertVal=%arr[$i]; //准备先和和$insertIndex比较 $insertIndex=$i-1; //如果这个条件满足,说明,我们还没有找到适当的位置 while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){ //同时把数后移 $arr[$insertIndex+1]=$arr[$insertInde]; $insertIndex--; } //插入这时就给$insertVal找的了适当位置 $arr[$insertIndex+1]=$insertVal; } } |
php快速排序法代码
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function quickSort($lefl,$right,&$array){
$l=$lefl; $r=$right; $pivot = $array[($lefl+$right)/2]; whlie($l<$r){ while($array[$l]<$pivot) $l++; while($array[$r]>$pivot) $r--; if($l>=$r) break; $temp=$array[$l]; $array[$l]=$array[$r]; $array[$r]=$temp; if($array[$l]==$pivot) --$r; if($array[$r]==$pivot) ++$l; } if($l==$r){ $l++; $r--; } if($left<$r) quickSort($left,$r,$array); if($right>$l) quickSort($l,$right,$array); } |
动态创建200000个数据
1
2 3 |
分析流程图