php 冒泡排序和插入排序的学习总结

 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;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值