排序------快速,插入,选择,冒泡

快速排序
/数组快速排序    先取出数组第一个  把每个和它比较,比它小的放在l数组,大的放r数组,一直比较,最后合到一个数组
/*function kuaisu($a){
    $c=count($a);
    if($c<=1){
        return $a;
    }
    $l=$r=array();
    for($i=1;$i<$c;$i++){
        if($a[$i]<$a[0]){
            $l[]=$a[$i];
        }else{
            $r[]=$a[$i];
        }
    }
    $l=kuaisu($l);
    $r=kuaisu($r);
    return array_merge($l,array($a[0]),$r);
}

$m=array(1,7,3,2,5,0);
//echo kuaisu($m);
print_r(kuaisu($m)) ;*/


插入排序    先找一个数进行比较,如果前一个比后一个大  ,调换位置

function charu($a){
    $c = count($a);
    for($i=1;$i<$c;$i++){
        $t = $a[$i];
        for($j=$i;$j>0 && $a[$j-1]>$t;$j--){
            $a[$j] = $a[$j-1];
        }
        $a[$j] = $t;
    }
    return $a;
}

$m=array(1,7,3,2);
print_r(charu($m));
或者
function charu($a){
    $c = count($a);
    for($i=1;$i<$c;$i++){
        $t = $a[$i];
        for($j=$i;$j>0;$j--){
            if($a[$j-1]>$t){
                $a[$j] = $a[$j-1];
                $a[$j-1] = $t;
            }
        }
        //$a[$j] = $t;
    }
    return $a;
}

选择排序
//选择排序   第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推
/*初始序列:{ 49 27 65 97 76 12 38 }
第1趟:12与49交换:12 { 27 65 97 76 49 38 }
第2趟:27不动 :12 27 { 65 97 76 49 38 }
第3趟:65与38交换:12 27 38 { 97 76 65 49}
第4趟:97与49交换:12 27 38 49 { 97 76 65 }
第5趟:76与65交换:12 27 38 49 65 { 97 76 }
第6趟:97与76交换:12 27 38 49 65 76 97 完成*/

/*function xuanze($a){
    $c = count($a);
    for($i=0;$i<$c;$i++){
        for ($j=$i+1;$j<$c;$j++){
            if($a[$i]>$a[$j]){
                $t = $a[$j];
                $a[$j] = $a[$i];
                $a[$i] = $t;
            }
        }
    }
    return $a;
}
$m=array(1,7,3,2);
print_r(xuanze($m));

冒泡 从后往前
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 [1

function maopao($a){
    $c = count($a);
    for($i=0;$i<$c;$i++){
        for ($j=$c-1;$j>$i;$j--){
            if($a[$j]<$a[$j-1]){
                $t = $a[$j-1];
                $a[$j-1] = $a[$j];
                $a[$j] = $t;
            }
        }
    }
    return $a;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值