php实现木桶排序
今天重新看了看木桶排序,思路比较简单,这里整理一下,免得下次忘记。
假设要对一组数据 2 2 3 1 6 5 4 进行桶排序。
1.首先选出最小元素1和最大元素6,做一个桶,也就是定义一个1-6的数组,并且把他们的值都置为0。
2.遍历这个桶,每一步遍历桶都在该数组中查找是否有元素和这个桶的下标相等,如果有,则该桶中该下标对应的元素值自增1;
3.遍历桶,根据数组中元素在桶中出现的次数就可以排好序了,用一个数组保存结果并返回。
代码如下:
<?php
$list = array(2,2,3,1,6,5,4);
function backetSort($list){
$min = min($list);
$max = max($list);
//做桶,最小值到最大值全部用0填充
$arr = array_fill($min,$max-$min+1,0);
//入桶
foreach($list as $k=>$v){
$arr[$v]++;
}
foreach($arr as $k=>$v){
for($i=1;$i<=$v;$i++){
$result[] = $k;
}
}
return $result;
}
$list = backetSort($list);
var_dump($list);
php实现木桶排序的更多相关文章
- 347. Top K Frequent Elements 最常用的k个元素
[抄题]: Given a non-empty array of integers, return the k most frequent elements. For example,Given [1 ...
- leetcode347 Top K Frequent Elements
""" Given a non-empty array of integers, return the k most frequent elements. Example ...
- iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码
iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用. 使用OpenGLE覆盖阿尔法通道视频动画播放器视图. 可选最大日期截至当日日期的日期轮选器ChooseDatePicker 简单轻量的图片浏 ...
- qmh的测试1
题目:传送门 首先输入一个n,之后输入n个数a(1<=a<=1e7),对这n个数排序后,你需要找到所有的它们连续的长度.把这些连续的长度排序后输出 输入 输入: 8 1 5 2 7 4 5 ...
- 数据结构与算法之PHP排序算法(桶排序)
一.基本思想 桶排序是将待排序的数据分割成许多buckets,然后每个bucket各自排序,或用不同的排序算法,或者递归的使用bucket sort算法.也是典型的分而治之(divide-and-co ...
- hdu 4957 贪心破木桶接水大trick
http://acm.hdu.edu.cn/showproblem.php?pid=4957 拿n只破的木桶去接水,每只木桶漏水速度为a[i],最后要得到b[i]单位的水,自来水的出水速度为V,木桶里 ...
- Vue木桶布局插件
公司最近在重构,使用的是Vue框架.涉及到一个品牌的布局,因为品牌的字符长度不一致,所以导致每一个的品牌标签长短不一.多行布局下就会导致每行的品牌布局参差不齐,严重影响美观.于是就有了本篇的木 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
随机推荐
- AC日记——大小写字母互换 openjudge 1.7 14
14:大小写字母互换 总时间限制: 1000ms 内存限制: 65536kB 描述 把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母. 输入 输入一行:待互换的字符串 ...
- Java中的链表数据结构
首先,我们来定义一个链表的数据结构,如下: 1 public class Link { 2 private int value; 3 private Link next; 4 public void ...
- 纯js代码实现手风琴特效
我知道现在大多数前端开发人员都在使用jQuery等第三方的库来进行开发,这不仅节约了时间,也让效率大大的提高,并让公司的效益增加,何乐而不为呢? 但是,这也会有一定的缺点,比如jQ比js慢,尤其在大型 ...
- C# 内存信息
Process proc = Process.GetCurrentProcess(); Console.Write("专用工作集内存:"); ...
- Vs 2015 调试ASP.NET Core修改监听端口
如何改变监听IP地址和端口?在这里找到了答案:https://github.com/aspnet/KestrelHttpSer... 把Program.cs加一行UseUrls代码如下: using ...
- Apache配置中的ProxyPass 和 ProxyPassReverse
apache中的mod_proxy模块用于url的转发,即具有代理的功能.应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能. 例如使用apache作为 ...
- JS常用自定义方法
1,JS生成随机数方法 getRandom(100),表示生成0-100的数 function getRandom(n){ return Math.floor(Math.random()*n+1) } ...
- Github 简明教程
http://www.runoob.com/w3cnote/git-guide.html http://rogerdudler.github.io/git-guide/index.zh.html
- Linux常用命令笔记
~ 我的home目录/ 系统根目录进入home目录:cd \进入跟目录:cd /Maven编译:mvn clean deploy -U -Dmaven.test.skip=true dependenc ...
- Windows 提高效率的常用快捷键
开发中减少使用鼠标次数,是一个很cool的体验!下面的快捷键在Win7上测试有效 快捷键 说明 Ctrl+Shift+N 创建一个新的文件夹. (Ctrl + N 打开桌面) Ctrl+Shift+ ...