分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。 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) }
算法是一门高深的学问 :)