几个简单易懂的排序算法。排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置。
<?php // 冒泡排序 function bubble_sort(array $arr){ $len = count($arr) - 1; for($i=0; $i< $len; $i++){ // 升序的话,两两比较第一轮排序过后,最后一个一定是最大的了; // 所以第二轮时$j依然从0开始,但是结束的时候只需要管前$len-1的长度 for($j=0; $j < $len-$i; $j++){ if ($arr[$j] > $arr[$j+1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr; } // 选择排序 function select_sort(array $arr){ $len = count($arr) - 1; for($i=0; $i< $len; $i++){ for($j=$i+1; $j <= $len; $j++){ // 选择排序,就是选择下边是$i的元素,固定住它,让它去和$j的比和交换 if ($arr[$j] < $arr[$i]){ $temp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $temp; } } } return $arr; } // 插入排序
/** 所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。**/ function insert_sort(array $arr){ $len = count($arr) - 1; for($i=0; $i<= $len; $i++){ // 在$i位置前面的元素进行插入 for($j=$i; $j >0; $j--){ if ($arr[$j-1] > $arr[$j]){ $temp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $temp; } } } return $arr; } $arr = array(12, 9, 1, 4, 6, -3); $bubble = bubble_sort($arr); $select = select_sort($arr); $insert = insert_sort($arr); echo '<pre>'; print_r($bubble); echo '<pre>'; print_r($select); echo '<pre>'; print_r($insert); /** * Array ( [0] => -3 [1] => 1 [2] => 4 [3] => 6 [4] => 9 [5] => 12 ) */
排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置。
用冒泡法实现了一个简单的排序问题,题目是这样的。
<?php $arr = array( 'B5','D3','B4','B2','C5','A1','A2','A6','A4','A5','A6','B1','C1' ); $len = count($arr) - 1; for($i=0; $i< $len; $i++){ for($j=0; $j < $len-$i; $j++){ $first_1 = getstr($arr[$j]); $first_2 = getstr($arr[$j],1); $second_1 = getstr($arr[$j+1]); $second_2 = getstr($arr[$j+1],1); $con1 = $first_1=='A' && ( $second_1!='A' || ($second_1=='A' && $first_2<$second_2) ); $con2 = $first_1!='A' && $second_1!='A' && ($first_2<$second_2 || ($first_2==$second_2 && ord($first_1)<ord($second_1) )); if ($con1 || $con2){ $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } // 取字符串 A1中的A或者1 function getstr($str,$type=0){ return substr($str, $type,1); } print_r($arr); echo array_shift($arr); /** * Array ( [0] => C5 [1] => B5 [2] => B4 [3] => D3 [4] => B2 [5] => C1 [6] => B1 [7] => A6 [8] => A6 [9] => A5 [10] => A4 [11] => A2 [12] => A1 ) * * C5 */