几种常用的排序方式(php实现)

1.普通冒泡排序

<?php
    function buddle_sort($a){
        $i=0;
        $j=0;
        $n= sizeof($a);
        if($n==0)
        {return false;
            
        }else{
            
         
         
        for($i=0;$i<$n;$i++)
        { 
           for($j=$n-1;$j>$i;$j--)
           {    
                if($a[$j]>$a[$i]){
                    $m = $a[$i];
                    $a[$i]= $a[$j];
                    $a[$j]= $m;
                    }
           }
        }
        
    }
    return $a;
    }

$l = array(20,10,15,4,2,45,11);

$R=buddle_sort($l);
foreach($R as $value)
echo $value,"_";



?>

  2.改进冒泡排序

<?php
    function buddle_sort($a){
        $i=0;
        $j=0;
        $n= sizeof($a);
        if($n==0)
        {return false;
            
        }else{
            
         $flag = true;
         
        for($i=$n-1;$i>0 && $flag;$i--)
        { $flag = false;
           for($j=0;$j<$i;$j++)
           {    
                if($a[$j]>$a[$j+1]){
                    $m = $a[$j+1];
                    $a[$j+1]= $a[$j];
                    $a[$j]= $m;
                    $flag = true;
                   
                    }
                  
           }
        }
         
    }
    return $a;
    }

$l = array(10,15,20,25,30,31,5);

$R=buddle_sort($l);

foreach($R as $value)
echo $value,"_";



?>

  3.选择排序

<?php
    function buddle_sort($a){
        $i=0;
        $j=0;
        $n= sizeof($a);
        if($n==0)
        {return false;
            
        }else{
            
         
         
        for($i=$n-1;$i>0;$i--)
        {   $max = $i;
           for($j=0;$j<$i;$j++)
           {    
                if($a[$j]>$a[$max]){
                    $max = $j;
                    }
                  
           }
           if($a[$max] >$a[$i])
           {
               $m = $a[$i];
               $a[$i]=$a[$max];
               $a[$max] = $m;
           }
        }
         
    }
    return $a;
    }

$l = array(10,1,2,5,30,31,6);

$R=buddle_sort($l);

foreach($R as $value)
echo $value,"_";



?>

  4.插入排序

<?php
function simple_sort($a){
    $l = sizeof($a);
    if(!$l){
        return false;
    }
    for($i=1;$i<$l;$i++){

       if($a[$i]<$a[$i-1]){
          
            for($j = $i;$j>0;$j--){
              
               if($a[$j]<$a[$i])
               { 
                 break;
                }
            } 
            $v=$a[$i];
            for($m=$i;$m>$j+1;$m--)
            {
            $a[$m]=$a[$m-1];
            }
            $a[$j+1] =$v;
              
           }
}
    
    return $a;
}

$s =array(2,13,5,12,6,67,54,12);
$R=simple_sort($s);
 foreach ($R as $value) {
echo $value,"_";
}

  5.快排1,浪费空间

<?php
function quickSort($arr){
    if(count($arr)>1){
        $k=$arr[0];
        $x=array();
        $y=array();
        $_size=count($arr);
        for($i=1;$i<$_size;$i++){
            if($arr[$i]<=$k){
                $x[]=$arr[$i];
            }elseif($arr[$i]>$k){
                $y[]=$arr[$i];
            }
        }
        $x=quickSort($x);
        $y=quickSort($y);
        return array_merge($x,array($k),$y);
    }else{
        return $arr;
    }
}
$a =array(2,1,2,4,12,5,6,8);
$r = quickSort($a);
var_dump($r);
?>

  6.快排2,推荐,在一个数组内实现。

<?php
$a = array(2, 1, 5, 3, 6, 4, 8, 9, 1);

function partition(&$a, $low, $high) {
    $pivot = $a[$low];
    while($low < $high) {
        while($low < $high && $a[$high] >= $pivot) {
            $high--;
        }
        $a[$low] = $a[$high];
        while($low < $high && $a[$low] <= $pivot) {
            $low++;
        }
        $a[$high] = $a[$low];
    }
    $a[$low] = $pivot;
    return $low;
}


function qs(&$a, $low, $high) {
    if ($low < $high) {
        $p = partition($a, $low, $high);
        qs($a, $low, $p-1);
        qs($a, $p+1, $high);
    }
}


qs($a, 0, 8);

var_dump($a);

 7.补充一个 线性排序,对于不大于100的数字,排序非常快

function sort1($a){

    $s= array();
    for($j = 0;$j <sizeof($a);$j++) 
{
    $s[$a[$j]] = @$s[$a[$j]]+1;
}

  return $s;  
}

function sort2($a){
     if(!sizeof($a)){
        return false;
    }
    $max = $a[0];
    for($i = 0;$i < sizeof($a);$i++)
    {
     if($a[$i]>$max){
         $max = $a[$i];
     }   
    }
    $resort = sort1($a);
    //var_dump($resort);exit;
    $m=array();
    for($i = 0;$i<$max+1;$i++)
    {
        while(@$resort[$i]){
           $m = array_merge($m,array($i));
            $resort[$i] --;
        }
    }
    return $m;
}
$a= array(2,5,4,7,8,9,1,2,3);
$z = sort2($a);
var_dump($z);

  

posted @ 2015-08-28 19:27  木子点点  阅读(249)  评论(0编辑  收藏  举报