分別用冒泡排序法,快速排序法,選擇排序法,插入排序法將下面數組中的值按照從小到大的順序進行排序。 15,33,5,89,6,4php
原理分析:算法
代碼實現:數組
<?php /** * Created by PhpStorm. * User: admin * Date: 2017/10/30 * Time: 16:23 */ $arr = [15,33,5,89,6,4]; function bubbleSort($arr) { $count = count($arr); //該層循環控制 須要冒泡的輪數 for ($i=0; $i<$count; $i++) { //該層循環用來控制每輪 冒出一個數 須要比較的次數 for ($k=0; $k<$count-$i-1; $k++){ if($arr[$k]>$arr[$k+1]) { $tmp = $arr[$k+1]; $arr[$k+1] = $arr[$k]; $arr[$k] = $tmp; } } } return $arr; } var_dump(bubbleSort($arr));
最後結果:ui
array(6) { [0]=> int(4) [1]=> int(5) [2]=> int(6) [3]=> int(15) [4]=> int(33) [5]=> int(89) }
原理分析:spa
代碼實現:code
<?php /** * Created by PhpStorm. * User: admin * Date: 2017/10/30 * Time: 17:26 */ $arr = [15,33,5,89,6,4]; function quickSort($arr){ //判斷是否是還有進行 if (count($arr)>1){ //指定基準 $k = $arr[0]; //設置左邊數組 $x = []; //設置右邊數組 $y = []; for ($i=1; $i<count($arr); $i++) { //進行判斷 if ($k>$arr[$i]){ $x[] = $arr[$i]; }else{ $y[] = $arr[$i]; } } //遞歸執行 $x = quickSort($x); $y = quickSort($y); //合併數組 return array_merge($x,array($k),$y); }else { return $arr; } } var_dump(quickSort($arr));
最後結果:orm
array(6) { [0]=> int(4) [1]=> int(5) [2]=> int(6) [3]=> int(15) [4]=> int(33) [5]=> int(89) }
原理分析:排序
代碼實現:遞歸
<?php /** * Created by PhpStorm. * User: admin * Date: 2017/10/30 * Time: 18:10 */ $arr = [15,33,5,89,6,4]; function selectSort($arr) { $count = count($arr); for($i=0; $i<$count-1; $i++) { //先假設最小的值的位置 $p = $i; for($j=$i+1; $j<$count; $j++) { //$arr[$p] 是當前已知的最小值 if($arr[$p] > $arr[$j]) { //比較,發現更小的,記錄下最小值的位置;而且在下次比較時採用已知的最小值進行比較。 $p = $j; } //已經肯定了當前的最小值的位置,保存到$p中。若是發現最小值的位置與當前假設的位置$i不一樣,則位置互換便可。 if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } } //返回最終結果 return $arr; } var_dump(selectSort($arr));
最後結果:io
array(6) { [0]=> int(4) [1]=> int(5) [2]=> int(6) [3]=> int(15) [4]=> int(33) [5]=> int(89) }
原理分析:
代碼實現:
<?php /** * Created by PhpStorm. * User: admin * Date: 2017/10/30 * Time: 18:20 */ $arr = [15,33,5,89,6,4]; function insertSort($arr) { $count = count($arr); for($i=1; $i<$count; $i++){ $tmp = $arr[$i]; //內層循環控制,比較並插入 for($j=$i-1;$j>=0;$j--) { if($tmp < $arr[$j]) { //發現插入的元素要小,交換位置,將後邊的元素與前面的元素互換 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else { //若是碰到不須要移動的元素,因爲是已經排序好是數組,則前面的就不須要再次比較了。 break; } } } return $arr; } var_dump(insertSort($arr));
最後結果:
array(6) { [0]=> int(4) [1]=> int(5) [2]=> int(6) [3]=> int(15) [4]=> int(33) [5]=> int(89) }
算法是一門高深的學問 :)