PHP排序算法系列之桶排序详解

 更新时间:2018年01月04日 11:18:14   作者:敗给了忧伤  
这篇文章主要为大家详细介绍了PHP排序算法系列之桶排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

桶排序

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到O(n log n)下限的影响。

原理

设置一个定量的数组当作空桶子。
寻访序列,并且把项目一个一个放到对应的桶子去。
对每个不是空的桶子进行排序。
从不是空的桶子里把项目再放回原来的序列中。

举例

假定待排数字[6 2 4 1 5 9]

准备10个空桶,最大数个空桶
[0 0 0 0 0 0 0 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)

1. 顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]

[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)

2. 顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶

[6 2 4 1 5 9] 待排数组
[0 0 2 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)

3,4,5,6省略,过程一样,全部入桶后变成下边这样

[6 2 4 1 5 9] 待排数组
[0 1 2 0 4 5 6 0 0 9] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
0表示空桶,跳过,顺序取出即可:1 2 4 5 6 9

PHP代码实现

<?php
function bucket_sort($arr){
 $result=[];
 $length=count($arr);
 //入桶
 for($i=0,$max=$arr[$i];$i<$length;$i++){
  if ($max<$arr[$i]) {
   $max=$arr[$i];
  }
  $bucket[$arr[$i]]=[];
  array_push($bucket[$arr[$i]],$arr[$i]);
 }
 //出桶
 for($i=0;$i<=$max;$i++){
  if(!empty($bucket[$i])){
   $l=count($bucket[$i]);
   for ($j=0; $j <$l ; $j++) {
    $result[]=$bucket[$i][$j];
   }
  }
 }
 return $result;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • 用php或asp创建网页桌面快捷方式的代码

    用php或asp创建网页桌面快捷方式的代码

    上传到网站,shortcut.php 就会有提示下载一个名为 张楚网站.urll文件,保存在本地就是一个快捷方式!
    2010-03-03
  • PHP基于openssl实现非对称加密代码实例

    PHP基于openssl实现非对称加密代码实例

    这篇文章主要介绍了PHP基于openssl实现非对称加密代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • php新建文件自动编号的思路与实现

    php新建文件自动编号的思路与实现

    在系统中 在新建文件是可以实现自动编号。比如新建文本文件 默认文件名是:新建 文本文档.txt,如果继续新建时文件名自动变了:新建 文本文档 (2).txt, 以后就是 3,4,5….请问这种算法用PHP怎么实现。
    2011-06-06
  • 必须收藏的php实用代码片段

    必须收藏的php实用代码片段

    这篇文章主要为大家又分享了必须收藏的23个php实用代码片段,帮助大家更好地学习php程序设计,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Ubuntu中支持PHP5与PHP7双版本的简单实现

    Ubuntu中支持PHP5与PHP7双版本的简单实现

    这篇文章主要给大家介绍了关于Ubuntu中支持PHP5与PHP7双版本的简单实现方法,文中通过示例代码介绍的非常详细,这个方法也非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • PHP安装memcache扩展的步骤讲解

    PHP安装memcache扩展的步骤讲解

    今天小编就为大家分享一篇关于PHP安装memcache扩展的步骤讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • php获取URL中带#号等特殊符号参数的解决方法

    php获取URL中带#号等特殊符号参数的解决方法

    这篇文章主要介绍了php获取URL中带#号等特殊符号参数的解决方法,本文使用JS中的escape函数编码后传递解决这个问题,需要的朋友可以参考下
    2014-09-09
  • PHP读取xml方法介绍

    PHP读取xml方法介绍

    在php开发中,我们经常会越到读取xml文件的情况,这里简单总结下一些方法,方便需要的朋友
    2013-01-01
  • PHP图片自动裁切应付不同尺寸的显示

    PHP图片自动裁切应付不同尺寸的显示

    一张图片可能会在不同的地方显示,大小不同,比例也不同,因此本例介绍的这个图片自动裁切还是比较有用的,有需求的朋友可以看看
    2014-10-10
  • PHP处理Json字符串解码返回NULL的解决方法

    PHP处理Json字符串解码返回NULL的解决方法

    这篇文章主要介绍了PHP处理Json字符串解码返回NULL的解决方法,以一个过滤函数的实例展示了处理json返回错误的解决方法,并罗列了造成这一错误的常见情况,需要的朋友可以参考下
    2014-09-09

最新评论