首頁  >  文章  >  後端開發  >  使用珠算法對PHP數組進行排序

使用珠算法對PHP數組進行排序

藏色散人
藏色散人原創
2021-08-03 14:26:302538瀏覽

在《簡析怎麼透過PHP類別對整數陣列進行排序》中跟大家介紹了怎麼用PHP類別對陣列進行排序。那麼這篇文章來為大家介紹一個有趣的珠算法,並使用珠算法對PHP數組進行排序。

先跟大家簡單介紹下什麼是珠演算法?

珠演算法也稱為珠排序,是一種自然排序演算法,由Joshua J. Arulanandham, Cristian S. Calude 和Michael J. Dinneen 在2002年發展而來,並且在歐洲理論計算機協會(European Association for Theoretical Computer Science,簡稱EATCS)的新聞簡報上發表了此演算法。

珠排序的數位和類比硬體實作都可以實現 O(n );但是,該演算法的實作在軟體中往往要慢得多,只能用於對正整數列表進行排序。

在簡單了解演算法之後,我們直接上程式碼:

<?php
function columns($uarr)
{
    $n=$uarr;
    if (count($n) == 0)
        return array();
    else if (count($n) == 1)
        return array_chunk($n[0], 1);
    array_unshift($uarr, NULL);
    $transpose = call_user_func_array(&#39;array_map&#39;, $uarr);
    return array_map(&#39;array_filter&#39;, $transpose);
}
function bead_sort($uarr)
{
    foreach ($uarr as $e)
        $poles []= array_fill(0, $e, 1);
    return array_map(&#39;count&#39;, columns(columns($poles)));
}
echo &#39;原始数组: &#39;.&#39;
&#39;;
var_dump(array(5,3,1,3,8,7,4,1,1,3));
echo &#39;
&#39;.&#39;珠排序后 : &#39;.&#39;
&#39;;
var_dump(bead_sort(array(5,3,1,3,8,7,4,1,1,3)));

運行結果如:

使用珠算法對PHP數組進行排序

##在上述程式碼中為大家介紹幾個關鍵的函數:

1、

array_unshift()函數:用於向陣列插入新元素。新數組的值將插入到數組的開頭。被加上的元素作為一個整體添加,這些元素在數組中的順序和在參數中的順序一樣。此函數會傳回數組中元素的個數。

2、

call_user_func_array:呼叫回呼函數,並且把一個陣列參數當作回呼函數的參數,語法是「call_user_func_array(callable $callback array $param_arr): mixed”,表示將第一個參數作為回呼函數(callback)調用,把參數數組作(param_arr)為回調函數的的參數傳入。

3、

array_map :為陣列的每個元素套用回呼函數。

最後推薦大家一個咱們平台的最新免費課程《

從0開始進入PHP的世界》~快來學習吧!

以上是使用珠算法對PHP數組進行排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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