PHP--冒泡、選擇、插入排序法
阿新 • • 發佈:2017-10-12
常用 eat echo alt created .cn use ges select
使用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 ?>
PHP--冒泡、選擇、插入排序法