php冒泡排序与快速排序算法

php冒泡排序与快速排序算法

$a = array ( '3' , '8' , '1' , '4' , '11' , '7' );
print_r( $a );
$len = count ( $a );
//从小到大
for ( $i =1; $i < $len ; $i ++)
{
for ( $j = $len -1; $j >= $i ; $j --)
if ( $a [ $j ]< $a [ $j -1])
{ //如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
  $x = $a [ $j ];
  $a [ $j ]= $a [ $j -1];
  $a [ $j -1]= $x ;
}
}
print_r( $a );j
//另一种方法 从小到大
$b = array ( '4' , '3' , '8' , '9' , '2' , '1' );
$len = count ( $b );
for ( $k =1; $k < $len ; $k ++)
{
for ( $j = $len -1, $i =0; $i < $len - $k ; $i ++, $j --)
if ( $b [ $j ]< $b [ $j -1]){
//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
  $tmp = $b [ $j ];
  $b [ $j ]= $b [ $j -1];
  $b [ $j -1]= $tmp ;
}
print_r( $b );
echo "
";
}
//下面的这个执行效率更高
function maopao( $arr )
{
  $len = count ( $arr );
  for ( $i =1; $i < $len ; $i ++) //最多做n-1趟排序
  {
  $flag = false;  //本趟排序开始前,交换标志应为假
  for ( $j = $len -1; $j >= $i ; $j --)
  {
   if ( $arr [ $j ]< $arr [ $j -1]) //交换记录
   { //如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
    $x = $arr [ $j ];
    $arr [ $j ]= $arr [ $j -1];
    $arr [ $j -1]= $x ;
    $flag = true; //发生了交换,故将交换标志置为真
   }
  }
  if (! $flag ) //本趟排序未发生交换,提前终止算法
  return $arr
  }
}
$shuz = array ( '2' , '4' , '1' , '8' , '5' );
$bb = maopao( $shuz );
print_r( $bb );
// 快速排序
function kuaisu( $arr ){
   $len = count ( $arr );
   if ( $len <= 1){
     return $arr ;
   }
   $key = $arr [0];
   $left_arr = array ();
   $right_arr = array ();
   for ( $i =1; $i < $len ; $i ++){
     if ( $arr [ $i ] <= $key ){
       $left_arr [] = $arr [ $i ];
     } else {
       $right_arr [] = $arr [ $i ];
     }
   }
   $left_arr = kuaisu( $left_arr );
   $right_arr = kuaisu( $right_arr );
   return array_merge ( $left_arr , array ( $key ), $right_arr );
}
$arr = array (23,98,54,2,9,62,34);
print_r(kuaisu( $arr ));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值