最简单快速的排序法之桶排法

前提:0-100内的随机数N个,实现从小到大(从大到小)排序。

实现:新建一个长度为101的数组,value初始化为0。数组每个key代表0-100中的数字,value值表示0-100中任意一个数组的出现次数。

通俗点说就是每个key代表一个桶,我们有101个桶,每个桶上表上数字0-100。把要排序的数字扔到对应的桶里,桶里扔一个数字时相应的key的value值就+1,表示桶里有几个数字。

代码实现:

$numbers = array(63,6,98,54,88,5,89,16,59,10,31,28,1,61,59,66,91,19,10,38,22,63,16); //需要排序的数字
$tmparr  = array_fill(0, 101, 0); //生成键值是0-100值是0的数组
$sortarr = array(); //排序后的数组
for($count=count($numbers), $i=0; $i<$count; $i++){
    $tmparr[$numbers[$i]] += 1;
}
for($count=count($tmparr), $j=0; $j<$count; $j++){
    for($k=0; $k<$tmparr[$j]; $k++){
        $sortarr[] = $j;
    }
}
print_r($sortarr);

方法封装:

/**
 * 排序之桶排法
 * @param array $numbers 需要排序的数字组
 * @param int   $arrlen 临时数组的长度,可以理解为要排序的数组中最大的数字
 * @return array $sortnumbers 排序后的数组
 **/
function barrel_sort($numbers, $arrlen){
    $sortnumbers = array();
    if(!empty($numbers) && is_array($numbers) && $arrlen > 0){
        $tmparr = array_fill(0, $arrlen, 0); //生成键值是0-100值是0的数组
        for($count=count($numbers), $i=0; $i<$count; $i++){
            $tmparr[$numbers[$i]] += 1;
        }
        for($count=count($tmparr), $j=0; $j<$count; $j++){
            for($k=0; $k<$tmparr[$j]; $k++){
                $sortnumbers[] = $j;
            }
        }
    }
    return $sortnumbers;
}

$numbers = array(63,6,98,54,88,5,89,16,59,10,31,28,1,61,59,66,91,19,10,38,22,63,16); //需要排序的数字
<pre name="code" class="php"><pre name="code" class="php">$sortnumbers = <span style="font-family: Arial, Helvetica, sans-serif;">barrel_sort($numbers, 101);</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="php">print_r($sortnumbers);



最简单快速的排序法之桶排法

时间: 2024-11-05 21:34:13

最简单快速的排序法之桶排法的相关文章

75.Sort Colors(法1快排法2线性扫描统计赋值)

Given an array with n objects colored red, white or blue,sort them so that objects of the same color are adjacent, with the colors inthe order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red,white, and blue

排序算法第一篇(简单桶排、选择排序、冒泡排序、快速排序)

简单桶排序 1 /** 2 * @author: 攻城狮小白 3 * @creationTime:2017年11月24日 下午10:37:59 4 * @description: 桶排序(这个不是真正的桶排,真正的桶排比这个稍微复杂些.但是是桶排的思想,就叫它简单桶排吧) 5 * @questionDesc:一个班上有6名同学,考试成绩如下arr数组(满分10分),如何快速将学生成绩从小到大排列? 6 */ 7 public class BucketSortDemo { 8 public voi

最快最简单的排序算法:桶排序

在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不在.现在我们举个具体的例子来介绍一下排序算法. 首先出场的我们的主人公小哼,上面这个可爱的娃就是啦.期末考试完了老师要将同学们的分数按照从高到低排序.小哼的班上只有5个同学,这5个同学分别考了5分.3分.5分.2分和8分,哎考的真是惨不忍睹(满分是10分).接下来将分数进行从大到小排序,排序后是8

排序算法之——桶排序

这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结. 话不多说,下面我会用图文的方式向各位介绍桶排序. 1.主要思想: 桶排序的大体思路就是先将数组分到有限个桶中,再对每个桶中的数据进行排序,可以说是鸽巢排序的一种归纳结果(对每个桶中数据的排序可以是桶排序的递归,或其他算法,在桶中数据较少的时候用插入排序最为理想). 2.算法效率: 对N个数据进行桶排序的时间复杂度分为两部分: 1.对每一个数据进行映射函数的计算(映射函数确定了数据将被分到哪个桶),

排序算法下——桶排序、计数排序和基数排序

桶排序.计数排序和基数排序这三种算法的时间复杂度都为 $O(n)$,因此,它们也被叫作线性排序(Linear Sort).之所以能做到线性,是因为这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作. 1. 桶排序(Bucket Sort)? 1.1. 桶排序原理 桶排序,顾名思义,要用到"桶".核心思想是将要排序的数据分到几个有序的桶里,每个桶的数据再单独进行排序.桶内排完序后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了. 1.2. 桶排序的时间复杂度分析 如

一种简单快速的模板解析方法,活用with javascript版

//一种简单快速的模板解析方法,活用with var parseTpl = function( str, data ) { var tmpl = 'var __p=[];' + 'with(obj||{}){__p.push(\'' + str.replace( /\\/g, '\\\\' ) .replace( /'/g, '\\\'' ) .replace( /<%=([\s\S]+?)%>/g, function( match, code ) { return '\',' + code.

算法快速回顾——排序算法

常用排序算法有以下几种:冒泡排序.插入排序.快速排序.归并排序.堆排序. 本文将对五种常用算法分析并实现. //交换两个元素的值 这里列出几种不同写法 void swap(int *a, int *b) { int c = *a; *a = *b; *b = c; } void swap(int *a,int *b) { *a = (*a)^(*b); *b = (*b)^(*a); *a = (*a)^(*b); } void swap(int *a,int *b) { *a = *a + *

PlantUML —— 应用于 Eclipse 的简单快速的 UML 编辑软件

简介: 在应用系统软件开发过程中,如果软件由很多对象组成,它的结构仅仅凭借分析很难理清,同时为了有利于软件的开发及重用,所以在开发系统之前建模是非常有必要的,在众多的建模方法中选择一种适应自身应用特点,方便不同背景的人们交流的建模方法已经成为开发人员及用户的迫切愿望.UML 是面向对象软件开发中的一种通用.统一的图形模型语言,是用于软件系统规约化.可视化构造和建模的有效工具.本文介绍了一种简单快速的 UML 编辑软件 -- PlantUML,PlantUML 是一个用来绘制 UML 图的 Jav

怎样简单快速的把PDF转换成word

现在有很多文档资料都是PDF格式,这种文档格式虽然可以编辑,但比较复杂,所以很多人会将PDF文档格式转成word文档,这样对文档的内容更加便于利用,而且也便于编辑.但是如果直接通过复制粘贴将文档中的内容复制到word中,那么对页面的排版会有很大影响,而且不能一次全部复制.那除了复制粘贴怎么可以简单快速的把PDF格式转换成一个word文档呢? 若处理的文档较多,单个文档较大,则需要用文档转换工具来操作,转换步骤基本就是选择类型,添加文件,选项设置,最后转换就可以了.?使用工具:迅捷PDF转换器具体