在《簡(jiǎn)析怎么通過(guò)PHP類對(duì)整數(shù)數(shù)組進(jìn)行排序》中給大家介紹了怎么用PHP類對(duì)數(shù)組進(jìn)行排序。那么本篇文章來(lái)給大家介紹一個(gè)有趣的珠算法,并使用珠算法對(duì)PHP數(shù)組進(jìn)行排序。
首先給大家簡(jiǎn)單介紹下什么是珠算法?
珠算法也叫珠排序,是一種自然排序算法,由Joshua J. Arulanandham, Cristian S. Calude 和 Michael J. Dinneen 在2002年發(fā)展而來(lái),并且在歐洲理論計(jì)算機(jī)協(xié)會(huì)(European Association for Theoretical Computer Science,簡(jiǎn)稱EATCS)的新聞簡(jiǎn)報(bào)上發(fā)表了該算法。
珠排序的數(shù)字和模擬硬件實(shí)現(xiàn)都可以實(shí)現(xiàn) O(n );但是,該算法的實(shí)現(xiàn)在軟件中往往要慢得多,只能用于對(duì)正整數(shù)列表進(jìn)行排序。
在簡(jiǎ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('array_map', $uarr); return array_map('array_filter', $transpose); } function bead_sort($uarr) { foreach ($uarr as $e) $poles []= array_fill(0, $e, 1); return array_map('count', columns(columns($poles))); } echo '原始數(shù)組: '.' '; var_dump(array(5,3,1,3,8,7,4,1,1,3)); echo ' '.'珠排序后 : '.' '; var_dump(bead_sort(array(5,3,1,3,8,7,4,1,1,3)));
運(yùn)行結(jié)果如:
在上述代碼中給大家介紹幾個(gè)關(guān)鍵的函數(shù):
1、array_unshift()
函數(shù):用于向數(shù)組插入新元素。新數(shù)組的值將被插入到數(shù)組的開(kāi)頭。被加上的元素作為一個(gè)整體添加,這些元素在數(shù)組中的順序和在參數(shù)中的順序一樣。該函數(shù)會(huì)返回?cái)?shù)組中元素的個(gè)數(shù)。
2、c
all_user_func_array
:調(diào)用回調(diào)函數(shù),并把一個(gè)數(shù)組參數(shù)作為回調(diào)函數(shù)的參數(shù),語(yǔ)法是“call_user_func_array(callable $callback, array $param_arr): mixed
”,表示把第一個(gè)參數(shù)作為回調(diào)函數(shù)(callback)調(diào)用,把參數(shù)數(shù)組作(param_arr)為回調(diào)函數(shù)的的參數(shù)傳入。
3、array_map
:為數(shù)組的每個(gè)元素應(yīng)用回調(diào)函數(shù)。
最后給大家推薦一個(gè)咱們平臺(tái)的最新免費(fèi)課程《從0開(kāi)始進(jìn)入PHP的世界》~快來(lái)學(xué)習(xí)吧!