PHP實現快速排序

1.核心要點
取一個值(最好是中間值),將數組中的元素依次和這個值相比較,如果大於放到新建的右邊的數組中,如果小於此值,將原數組中的元素放到左邊的數組中,然後依次遞歸左邊的數組和右邊的數組,但是遞歸需要跳出條件,當傳入的數組是最後一個元素時,也就是數組的數量等於1就不用排序了,直接返回,然後合併返回的數據。

原理:先將數組慢慢分解(選等級),再將數組慢慢合併(貪吃蛇原理)

public function quicksort($arr)
    {
        $count  = count($arr);
        if ($count <=1)
        {
            return $arr;
        }
        $key = $arr[0];
        $left = $right = array(); //必須寫,否則array_merge不管用
        //第一種
        array_shift($arr);
        foreach ($arr as $value)
        {
            if ($value <$key)
            {
                $left[] = $value;
            }else{
                $right[] = $value;
            }
        }
        //第二種
//        for($i=1;$i<$count;$i++)
//        {
//            if ($arr[$i] <$key)
//            {
//                $left[] = $arr[$i];
//            }else{
//                $right[] = $arr[$i];
//            }
//        }
        $l_re = self::quicksort($left);
        $r_re = self::quicksort($right);
        $result  = array_merge($l_re,array($key),$r_re);
        return $result;
    }

    public function demo()
    {
        $arr = array(1,6,9,7,8,3,2,4,1);
        $re = $this->quicksort($arr);
        dump($re);
    }
發佈了65 篇原創文章 · 獲贊 19 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章