php实现几种排序

第一:冒牌排序

    

     <?php 
error_reporting(0);
    $arr=array(0,5,-1,9,3);
    //将数据从小排序
function bubblesort(&$arr)
{
    for($i=0;$i <count($arr)-1;$i++)
    {
        for($j=0;$j<count($arr)-1-i;$j++)
        {
            if($arr[$j]>$arr[$j+1])
            {   
                $temp=$arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$temp;
            }
                
        }
    }
    print_r($arr);
    echo "内层";
}
    bubblesort($arr);
    print_r($arr);
?>

第二:选择排序

每一次遍历找到最小的放到前边去

           


 <?php 
error_reporting(0);
     $arr=array(0,5,-1,9,3);
function selectsort(&$arr)
{
      for($i=0;$i<count($arr)-1;$i++)
      {
          $min=$arr[$i];
          //记录下标值
          $minindex=$i;
          for($j=$i+1;$j<count($arr);$j++)
          {
              if($min>$arr[$j])
              {
                  $min=$arr[$j];
                  $minindex=$j;
              }
          }
          $temp=$arr[$i];
          $arr[$i]=$arr[$minindex];
          $arr[$minindex]=$temp;
      }
    print_r($arr);
}
    selectsort($arr);
print_r($arr);
            ?>

第三:插入排序

<?php 
error_reporting(0);
                  $arr=array(0,5,-1,9,3);
    function insertsort(&$arr)
    {
        //默认下标为0的为有序的
        for($i=1;$i<count($arr);$i++)
        {
            $insertval=$arr[$i];
            //准备先和这个比较
            $insertindex=$i-1;
            
            while($insertindex>=0&&$insertval<$arr[$insertindex])
            {
                $arr[$insertindex+1]=$arr[$insertindex];//注意移位
                $insertindex--;
            }
if($arr[$insertindex+1]!=$insertval)//优化同值交换
            $arr[$insertindex+1]=$insertval;
        }
    }
    insertsort($arr);
    print_r($arr);
?>
 

四:快速排序

<?php 
error_reporting(0);
$arr=array();
for($i=0;$i<200000;$i++)
{
    $arr1=rand(0, 3000);
    $arr[$i]=$arr1;
}
date_default_timezone_set('Asia/Shanghai'); 

function quicksort($left,$right,&$arr)
{
    $l=$left;
    $r=$right;
    $pivot=$arr[($left+$right)/2];
    $temp=0;
    while($l<$r)
    {
        while($arr[$l]<$pivot) $l++;
        while($arr[$r]>$pivot) $r--;
        
          if($l>=$r)
                 break;
          $temp=$arr[$l];
          $arr[$l]=$arr[$r];
          $arr[$r]=$temp;
          if($arr[$l]==$pivot)  --$r;
          if($arr[$r]==$pivot)  ++$l;
          
    }
          if($l==$r)
          {
              $l++;
              $r--;
          }
          if($left<$r)  quicksort($left, $r, $arr);
          if($right>$l) quicksort($l, $right, $arr);
    
}
    $today=date('Y-n-d G:i:s' );
    echo "排序之前时间:".$today;
    quicksort(0, count($arr)-1,$arr);
    echo "排序之后时间:".$today."<br>";
   //print_r($arr);
?>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值