php实现木桶排序

今天重新看了看木桶排序,思路比较简单,这里整理一下,免得下次忘记。

假设要对一组数据 2 2 3 1 6 5 4  进行桶排序。

1.首先选出最小元素1和最大元素6,做一个桶,也就是定义一个1-6的数组,并且把他们的值都置为0。

2.遍历这个桶,每一步遍历桶都在该数组中查找是否有元素和这个桶的下标相等,如果有,则该桶中该下标对应的元素值自增1;

3.遍历桶,根据数组中元素在桶中出现的次数就可以排好序了,用一个数组保存结果并返回。

代码如下:

 1 <?php
 2
 3 $list = array(2,2,3,1,6,5,4);
 4
 5 function backetSort($list){
 6     $min = min($list);
 7     $max = max($list);
 8     //做桶,最小值到最大值全部用0填充
 9     $arr = array_fill($min,$max-$min+1,0);
10     //入桶
11     foreach($list as $k=>$v){
12         $arr[$v]++;
13     }
14
15     foreach($arr as $k=>$v){
16         for($i=1;$i<=$v;$i++){
17             $result[] = $k;
18         }
19     }
20     return $result;
21 }
22
23 $list = backetSort($list);
24
25 var_dump($list);
时间: 2024-10-29 19:12:17

php实现木桶排序的相关文章

php木桶排序

<?php //木桶排序 $count = array(6,10,4,12,4,90,33); function mutong($max,$array) { //填充木桶 $arr = array_fill(0, $max, 0); //开始标示木桶 for($i = 0; $i<=count($array)-1 ; $i++){ //var_dump($array[$i]); $arr[$array[$i]]++; } $mutomg = array(); //开始从木桶中拿出数据 for(

一些算法

//木桶排序/* 首先产生两个数字,最大值和最小值,然后根据两个数字的值决定要创建多少个桶装数据, 每个 桶装数据按key编好号码,按数组内的数字指定桶的出现次数. 然后输出所有指定桶.木桶算法是不稳定算法.*/$count = array(6,10,4,12,4,90,33); function mutong($max,$array){ //填充木桶 $arr = array_fill(0, $max, 0);//函数用给定的键值填充数组 //开始标示木桶 for($i = 0; $i<=co

2015年“深圳杯”数学建模夏令营-B题:DNA序列的k-mer index 问题

这是一个山科大的同学给我的一个问题,向我询问一下思路,对于数学建模,我没太多的了解,所以只能用计算机程序的方法来解答. 这是具体的问题: 这个问题来自 DNA序列的k-mer index问题. 给定一个DNA序列,这个系列只含有4个字母ATCG,如 S ="CTGTACTGTAT".给定一个整数值k,从S的第一个位置开始,取一连续k个字母的短串,称之为k-mer(如k= 5,则此短串为CTGTA), 然后从S的第二个位置, 取另一k-mer(如k= 5,则此短串为TGTAC),这样直至

iOS火焰动画效果、图文混排框架、StackView效果、偏好设置、底部手势等源码

iOS精选源码 高性能图文混排框架,构架顺滑的iOS应用. 使用OpenGLE覆盖阿尔法通道视频动画播放器视图. 可选最大日期截至当日日期的日期轮选器ChooseDatePicker 简单轻量的图片浏览器YCPhotoBrower 使用偏好设置.属性列表.归档解档保存数据.恢复数据 页面底部手势交互滚动UITableView 使用CoreAnimation来模拟iOS中的StackView. 盒子可以更具长宽高变化的动画 iOS优质博客 iOS导航栏使用总结 目录:一.设置导航栏样式二.自定义导

【C/C++学院】0907-象棋五子棋代码分析/寻找算法以及排序算法

象棋五子棋代码分析 编译代码报错: 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for mo

Vue木桶布局插件

????公司最近在重构,使用的是Vue框架.涉及到一个品牌的布局,因为品牌的字符长度不一致,所以导致每一个的品牌标签长短不一.多行布局下就会导致每行的品牌布局参差不齐,严重影响美观.于是就有了本篇的木桶布局插件. 木桶布局的实现是这样分步骤的: 首先对要填放的内容进行排序,筛选出每一行的元素. 再对每一行元素进行修整,使其美观对齐. 分步骤 一.根据需要选出每行的元素 ????首先获取我们需要的元素.和我们目标容器的宽度. Vue组件容器: <template> <div ref=&qu

0基础学算法 第二弹 排序

大家好啊,这是0算法基础学算法系列第二篇,上次我在第一弹里讲了关于流程图的内容,我寻思着,这次讲些什么好呢,于是我决定,教大家一个很基础的算法,那就是排序,排序有很多方法,如果你有更多方法请在评论区里留言哦. 排序在程序中特别实用,常用的有快速排序,桶排序,冒泡排序,插入排序等等,在这里我不建议使用冒泡排序或者插入排序,建议桶排序和快速排序,这两个排序非常实用,时间复杂度低,理解起来也很容易,首先,你先思考一下,怎么用程序进行排序,然后你再来看看你的思路合理不合理,最后试着用程序实现它,实现后你

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

算法 希尔排序

希尔排序 Shell Sort 介绍: 希尔排序(Shell Sort)也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序.因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高. 执行流程: 首先