使用php来实现常用三种排序方法:
冒泡、选择、插入中,最优的是插入排序,我就把插入排序的流程画下来了:
插入排序法的流程图:
插入排序的代码:
function InsertSort(&$arr){ for ($i=1;$i<count($arr);$i++){ // 带插入的值 $insertVal = $arr[$i]; // 要比较的位置下标 $insertIndex = $i -1; while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){ // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移 $arr[$insertIndex+1] = $arr[$insertIndex]; $insertIndex--; } // 插入insertVal if($insertIndex+1 != $i){ $arr[$insertIndex+1] = $insertVal; } } }
下面的三种排序法的代码:
1 <?php
2 /** 3 * Created by PhpStorm. 4 * User: xxx 5 * Date: 2016/10/12 6 * Time: 21:38 7 */ 8 // 冒泡排序法 9 function maopao_sort(&$arr){ 10 // 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序 11 for($i=0;$i<count($arr)-1;$i++){ 12 // 内循环控制每一趟,找出最大的那个数:ccount($arr)-1-$i 13 for($j=0;$j<count($arr)-1-$i;$j++){ 14 if ($arr[$j] > $arr[$j+1]){ 15 $temp = $arr[$j+1]; 16 $arr[$j+1] = $arr[$j]; 17 $arr[$j] = $temp; 18 } 19 } 20 } 21 } 22 23 //选择排序法 24 function SelectSort(&$arr){ 25 for($i=0;$i<count($arr)-1;$i++){ 26 // 假设的最小数 27 $minVal = $arr[$i]; 28 //最小数的下标 29 $minIndex = $i; 30 for($j=$i+1;$j<count($arr);$j++){ 31 if ($minVal>$arr[$j]){ 32 $minVal = $arr[$j]; 33 $minIndex = $j; 34 } 35 } 36 if ($i != $minIndex){ 37 $temp = $arr[$i]; 38 $arr[$i] = $minVal; 39 $arr[$minIndex] = $temp; 40 } 41 } 42 } 43 44 // 插入排序法(小-->大) 45 function InsertSort(&$arr){ 46 for ($i=1;$i<count($arr);$i++){ 47 // 带插入的值 48 $insertVal = $arr[$i]; 49 // 要比较的位置下标 50 $insertIndex = $i -1; 51 while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){ 52 // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移 53 $arr[$insertIndex+1] = $arr[$insertIndex]; 54 $insertIndex--; 55 } 56 // 插入insertVal 57 if($insertIndex+1 != $i){ 58 $arr[$insertIndex+1] = $insertVal; 59 } 60 } 61 } 62 63 64 $arr = array(10,2,0,-23,90,-100,400); 65 //maopao_sort($arr); 66 //SelectSort($arr); 67 InsertSort($arr); 68 echo var_dump($arr)."<br>"; 69 print_r($arr);
快速排序法:
1 <?php 2 function quickSort(&$arr){ 3 if(count($arr)>1){ 4 $k=$arr[0]; 5 $x=array(); 6 $y=array(); 7 $_size=count($arr); 8 for($i=1;$i<$_size;$i++){ 9 if($arr[$i]<=$k){ 10 $x[]=$arr[$i]; 11 }elseif($arr[$i]>$k){ 12 $y[]=$arr[$i]; 13 } 14 } 15 $x=quickSort($x); 16 $y=quickSort($y); 17 return array_merge($x,array($k),$y); 18 }else{ 19 return$arr; 20 } 21 } 22 ?>