1、冒泡排序:对于一个长度为N的数组,我们需要排序 N-1 轮,每 i 轮 要比较 N-i 次。对此我们可以用双重循环语句,外层循环控制循环轮次,内层循环控制每轮的比较次数。
function test(){ $arr= array(1,43,54,62,21,66,32,78,36,76,39); $len = count($arr); //该层循环控制 需要冒泡的轮数 for($i =1; $i< $len ; $i++){ //该层循环用来控制每轮 冒出一个数 需要比较的次数 for ($j =0; $j <$len-$i ;$j++ ){ $tep = $arr[$j+1]; if($tep < $arr[$j]){ $arr[$j+1] = $arr[$j]; $arr[$j] = $tep; } } } return $arr;
}
2、插入排序:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
function test($arr) { $len = count($arr); for($i = 1; $i < $len; $i++) { //内层循环控制,比较并插入 if($arr[$i-1] > $arr[i]) { for($j = $i-1; $j >= 0; $j--) { //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换 $tmp = $arr[$j+1]; if($tmp < $arr[$j]) { $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; }else{ //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } } return $arr; }