<?php /** * Created by PhpStorm. * User: chm * Date: 2016/4/1 * Time: 19:35 */ //插入排序特点是一边是排好顺序的,另一边一个一个和顺序的数据对比,每次对比插入一个 function charu($arr) { $len = count($arr); //先给出一个原数组 echo "原数组为:"; for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo " "; echo "下面开始排序"; echo " "; //外层循环空值轮次 for($i = 1; $i < $len; $i++) { //比较新数和前面顺序序列,找好位置插入 $x = $arr[$i]; for($j = $i-1;$j >= 0;$j--) { if($x < $arr[$j]) { //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换 $arr[$j+1] = $arr[$j]; $arr[$j] = $x; } //如果碰到不需要移动的元素,由于是已经排好的数组,则前面的就不需要再次比较了。 else { break; } } //for循环用于输出数组,从第一次排序结束开始 for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo " "; } } $arrayha = array(3,1,6,4,5,2); charu($arrayha);
<?php /** * Created by PhpStorm. * User: chm * Date: 2016/4/1 * Time: 18:51 */ //冒泡算法有大数沉底,小数浮出,思想本质相同,本方法用的是大数沉底 function maopao($arr){ $len = count($arr); //先给出一个原数组 echo "原数组为:"; for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo " "; echo "下面开始排序"; echo " "; //用于记录冒泡轮次 for($i = 1;$i < $len;$i++){ //用于标记比较次数 for($k = 0;$k < $len-$i;$k++){ //比较大小 if($arr[$k]>$arr[$k+1]){ $x = $arr[$k+1]; $arr[$k+1] = $arr[$k]; $arr[$k] = $x; } } //下方for循环用于输出数组,从第一次排序开始 for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo " "; } } //调用方法 $arrayha = array(3,1,6,4,5,2); maopao($arrayha);
<?php /** * Created by PhpStorm. * User: chm * Date: 2016/4/1 * Time: 19:21 */ //选择排序,应该也有最大最小值选择方法吧,思想依然相同,本方法用的小数值选择 function xuanze($arr){ $len = count($arr); //先给出一个原数组 echo "原数组为:"; for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo " "; echo "下面开始排序"; echo " "; //记录轮次 for($i = 0;$i < $len-1;$i++){ //选择排序的标记$s,用于标记最小值 $s = $i; for($j = $i+1;$j < $len;$j++){ if($arr[$s] > $arr[$j]){ $s = $j; } } //若标记不在初始位置,交换标记的和前面最初的标记数据 if($s != $i) { $x = $arr[$s]; $arr[$s] = $arr[$i]; $arr[$i] = $x; } //下方for循环用于输出数组,从第一次排序开始 for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo " "; } } $arrayha = array(3,1,6,4,5,2); xuanze($arrayha);
<?php /** * Created by PhpStorm. * User: chm * Date: 2016/4/1 * Time: 20:25 */ //快速排序和前面的比起来思路要复杂一些,也是算法精髓入门之处,递归,我没仔细想怎么把每轮输出,因为分成小块了 function kuaisu($arr) { //先判断是否需要继续进行排序(即还有几个数据在数组中) $len = count($arr); if($len <= 1) { return $arr; } //选择第一个元素作为中间的标准值 $middle = $arr[0]; //遍历标准值外的所有元素,按照大小关系放入两个数组内 //初始化两个数组,用于分开排序 $left = array(); //小于中间标准值的数组 $right = array(); //大于标准值的数组 for($i=1; $i