美文网首页PHP经验分享
快排、冒泡、选择、插入排序PHP实现

快排、冒泡、选择、插入排序PHP实现

作者: spurYin | 来源:发表于2017-05-03 23:15 被阅读0次
    <?php 
    /**
    *快速排序
    **/
    function quickSort(&$arr,$left,$right)
    {
        $start=$left;
        $end=$right;
        while($start<$end){
            while($arr[$start]<$arr[$left] && $start!=$end){
                $start++;
            }
            while($arr[$end]>$arr[$left] && $start!=$end){
                $end--;
            }
            $tmp=$arr[$start];
            $arr[$start]=$arr[$end];
            $arr[$end]=$tmp;
        }
        if($arr[$start]>$arr[$left]){
            $start--;
        }
        $tmp=$arr[$start];
        $arr[$start]=$arr[$left];
        $arr[$left]=$tmp;
        if($start-1>$left){
            quickSort($arr,$left,$start-1);
        }
        if($start+1<$right){
            quickSort($arr,$start+1,$right);
        }
    }
    /**
    *快速排序1
    **/
    function quickSort1(&$arr,$left,$right)
    {
        $i=$left;
        $j=$right;
        $flag=$arr[$left];
        while($i<$j)
        {
            while($arr[$j]>=$flag && $i<$j)
            {
                $j--;
            }
            if($i<$j)
            {
                $arr[$i++]=$arr[$j];
            }
            while($arr[$i]<$flag && $i<$j)
            {
                $i++;
            }
            if($i<$j)
            {
                $arr[$j--]=$arr[$i];
            }
        }
        $arr[$i]=$flag;
        if($i>$left){
            quickSort1($arr,$left,$i-1);
        }
        if($i<$right){
            quickSort1($arr,$i+1,$right);
        }
    }
    /**
    *冒泡排序
    */
    function BubbleSort(&$arr)
    {
        $length=count($arr);
        for($i=0;$i<$length;$i++){
            for($j=0;$j<$length-$i-1;$j++){
                if($arr[$j+1]<$arr[$j]){
                    $tmp=$arr[$j];
                    $arr[$j]=$arr[$j+1];
                    $arr[$j+1]=$tmp;
                }
            }
        }
    }
    /**
    *选择排序
    */
    function SelectSort(&$arr){
        $length=count($arr);
        for($i=0;$i<$length;$i++){
            $now=$i;
            $min=$arr[$i];      
            for($j=$i+1;$j<$length;$j++){
                if($arr[$j]<$min){
                    $min=$arr[$j];
                    $now=$j;
                }
            }
            $tmp=$arr[$i];
            $arr[$i]=$min;
            $arr[$now]=$tmp;
        }
    }
    /**
    *插入排序
    **/
    function InsertSort(&$arr){
        $length=count($arr);
        for($i=1;$i<$length;$i++){
            $now=$arr[$i];
            if($now<$arr[$i-1]){            
                for($j=$i-1;$j>=0 && $arr[$j]>$now;$j--){
                    $arr[$j+1]=$arr[$j];
                }
                $arr[$j+1]=$now;
            }
        }
    }
    //测试排序结果
    for($i=0;$i<20;$i++){
        $arr[]=$i;
    }
    shuffle($arr);
    print_r($arr);
    //quickSort($arr,0,count($arr)-1);
    InsertSort($arr);
    print_r($arr);
    

    相关文章

      网友评论

        本文标题:快排、冒泡、选择、插入排序PHP实现

        本文链接:https://www.haomeiwen.com/subject/ggoltxtx.html