算法学习--希尔和快速排序

<?php

    //希尔派讯

    function scheer(array $array){

        $total=$grp=count($array);

        

        while ($grp>1){

            $grp=ceil($grp/2);

            do{

                $p=0;

                for($j=0;$j+$grp<=$total-1;$j++){

                    if ($array[$j]>$array[$j+$grp]){

                        $tmp=$array[$j];

                        $array[$j]=$array[$j+$grp];

                        $array[$j+$grp]=$tmp;

                        $p=1;

                    }

                }

            }while ($p!=0);

        }

        var_dump($array);

    }

    



    //快速排序

    function quicksort($array,$frist,$last){

        

        if($frist<$last){

            $i=$frist;

            $j=$last+1;

            $num=$array[$frist];

            do{

                do {

                    $i++;

                }while (!($num<=$array[$i]||$i==$last));

                do {

                    $j--;

                }while (!($num>=$array[$j]||$j==$frist));

                if($i<$j){

                    $tmp=$array[$i];

                    $array[$i]=$array[$j];

                    $array[$j]=$tmp;

                }else{

                    $tmp=$array[$frist];

                    $array[$frist]=$array[$j];

                    $array[$j]=$tmp;

                    break;

                }

            }while (1);

            quicksort($array, $frist, $j-1);  //前半部分

            quicksort($array, $j+1, $last);    //后半部分

        }else{

            var_dump($array);

        }

    }

    

    

    

    

    //函数运用

    

    $array=array(58,56,49,78,26,46,39,42,16,84,96);

    //scheer($array);

    quicksort($array, 0, (count($array)-1));

?>

 

你可能感兴趣的:(快速排序)