在《简析怎么通过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('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 '原始数组: '.'
';
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)));

运行结果如:

b216d38e5bc7edce70e6070db77dd90.png

在上述代码中给大家介绍几个关键的函数:

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数组进行排序
—–文章转载自PHP中文网如有侵权请联系ymkuzhan@126.com删除

下载声明:
  • 本站资源如无特殊说明默认解压密码为www.ymkuzhan.com建议使用WinRAR解压;
  • 本站资源来源于用户分享、互换、购买以及网络收集等渠道,本站不提供任何技术服务及有偿服务,资源仅提供给大家学习研究请勿作它用。
  • 赞助本站仅为维持服务器日常运行并非购买程序及源码费用因此不提供任何技术支持,如果你喜欢该程序,请购买正版!
  • 版权声明:
  • 下载本站资源学习研究的默认同意本站【版权声明】若本站提供的资源侵犯到你的权益,请提交版权证明文件至邮箱ymkuzhan#126.com(将#替换为@)站长将会在三个工作日内为您删除。
  • 免责声明:
  • 您好,本站所有资源(包括但不限于:源码、素材、工具、字体、图像、模板等)均为用户分享、互换、购买以及网络收集而来,并未取得原始权利人授权,因此禁止一切商用行为,仅可用于个人研究学习使用。请务必于下载后24小时内彻底删除,一切因下载人使用所引起的法律相关责任,包括但不限于:侵权,索赔,法律责任,刑事责任等相关责任,全部由下载人/使用人,全部承担。以上说明,一经发布视为您已全部阅读,理解、同意以上内容,如对以上内容持有异议,请勿下载,谢谢配合!支持正版,人人有责,如不慎对您的合法权益构成侵犯,请联系我们对相应内容进行删除,谢谢!