首頁  >  文章  >  後端開發  >  PHP雞尾酒(Cocktail)排序演算法的實作(程式碼範例)

PHP雞尾酒(Cocktail)排序演算法的實作(程式碼範例)

藏色散人
藏色散人原創
2019-03-08 10:14:292396瀏覽

雞尾酒排序也稱為雙向冒泡排序(bidirectional bubble sort)、搖曳排序(shaker sort)、波紋排序( ripple sort)、洗牌排序(shuffle sort)或穿梭排序( shuttle sort )是冒泡排序的一種變體,它既是一種穩定的排序演算法,也是一種比較排序。

PHP雞尾酒(Cocktail)排序演算法的實作(程式碼範例)

該演算法與冒泡排序的不同之處在於,它在每次遍歷清單時都在兩個方向進行排序。這種排序演算法實際上比冒泡排序更難以實現,並且解決了冒泡排序中的海龜問題。它只提供了微小的性能改進,並沒有改善漸近性能; 就像泡沫一樣,雖然它在教育中有用,但它沒有實際意義。

雞尾酒排序視覺化動圖範例如下:

PHP雞尾酒(Cocktail)排序演算法的實作(程式碼範例)

#PHP雞尾酒排序程式碼範例如下:

<?php
function cocktailSort($my_array)
{
    if (is_string($my_array))
        $my_array = str_split(preg_replace(&#39;/\s+/&#39;,&#39;&#39;,$my_array));

    do{
        $swapped = false;
        for($i=0;$i<count($my_array);$i++){
            if(isset($my_array[$i+1])){
                if($my_array[$i] > $my_array[$i+1]){
                    list($my_array[$i], $my_array[$i+1]) = array($my_array[$i+1], $my_array[$i]);
                    $swapped = true;
                }
            }
        }

        if ($swapped == false) break;

        $swapped = false;
        for($i=count($my_array)-1;$i>=0;$i--){
            if(isset($my_array[$i-1])){
                if($my_array[$i] < $my_array[$i-1]) {
                    list($my_array[$i],$my_array[$i-1]) = array($my_array[$i-1],$my_array[$i]);
                    $swapped = true;
                }
            }
        }
    }while($swapped);

    return $my_array;
}
$test_array = array(3, 0, 2, 5, -1, 4, 1);
echo "原始数组:\n";
echo implode(&#39;, &#39;,$test_array );
echo "\n排序后数组\n:";
echo implode(&#39;, &#39;,cocktailSort($test_array)). PHP_EOL;

輸出:

原始数组: 3, 0, 2, 5, -1, 4, 1
排序后数组 :-1, 0, 1, 2, 3, 4, 5

這篇文章是關於PHP雞尾酒(Cocktail)排序演算法的實作方法介紹,希望對需要的朋友有幫助!

以上是PHP雞尾酒(Cocktail)排序演算法的實作(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn