`
zhijun156
  • 浏览: 4510 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

算法排序之最简单最快的排序--桶排序(Bucket Sort)

阅读更多

桶排序(Bucket Sort):主要原理是将数组分到有限数量的桶子里,每个桶子再按个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。

桶排序相对于同样的N,桶数量M越大,其效率越高,最好的时间复杂度能达到O(N)。当然桶排序的空间复杂度为O(N+M),如果输入数据非常庞大,而桶的数量也会非常多,则空间代价无疑是昂贵的。

PS:此次我分享的并不是真正的桶排序算法,而是简化版桶排序,让初学算法排序的童学更易懂上手!

        接下来就开始主人公出场喽。

        在一次期末考试完了老师要将童学们的分数按照从高到低排序,咱们班一共10位童学,此时老师要让计算机将这10个分数输出,那我们该怎么做呢?

        首先我们要申请101个桶book[101],分别表示分数0~100分,刚开始将book[0]~book[100]都初始化为0,表示这些分数都还没有人得过,当出现分数时我们就相对应的将a[i]的值添加1,最后将出现过分数的下标打印出来即可。

        是不是发现很简单吧! 那我们就用程序来实现一下,这在我主要就提供Java代码(10个分数将是每次随机生成),别的语言大家感兴趣都是可以自己编写的。

 

 

 public static void main(String[] args) {
		
		long startTime = System.currentTimeMillis();
		bucketSort(10, 100);
		long endTime = System.currentTimeMillis();
		System.out.println("\n" + (endTime - startTime));
	}
	
	public static void bucketSort(Integer input, Integer rand) {
		
		int[] book = new int[rand + 1];
		for (int i = 0; i < book.length; i++) {
			book[i] = 0;
		}
		Random r = new Random();
		for (int i = 0; i < input; i++) {
			
			int num = r.nextInt(rand);
			for (int j = 0; j < book.length; j++) {
				
				if (num == j) {
					book[j] ++;
				}
			}
		}
		
		for (int i = book.length -1 ; i >= 0; i--) {
			
			for (int j = 1; j <= book[i]; j++) {
				System.out.print(i + " ");
			}
		}
	}

 

         最后我们再来看一下算法的时间复杂度,在不包括随机数遍历的过程,此种简化版桶排序的时间复杂度应该为O(N+M),当然桶的数量非常多时,内存开辟的空间依然是个问题。
         好,那我们最简单最快的排序就讲述完了。 但你们有没有发现一个问题呢? 老师一般在按分数排名的时候,最终想要看的是童学的名字,并不是分数。而此种排序无法对人本身进行排序, 那你会问有木有别的什么排序呢? 答案是:肯定有。
         期待我下一篇的文章分享。。 算法排序之邻居好说话--冒泡排序!

 

分享到:
评论

相关推荐

    经典算法的C#源码实现

    经典排序算法 - 桶排序Bucket sort 经典排序算法 - 插入排序Insertion sort 经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - 归并排序Merge sort 经典排序算法 - ...

    详解Bucket Sort桶排序算法及C++代码实现示例

    桶排序是一种线性排序算法,这里我们来详解Bucket Sort桶排序算法及C++代码实现示例,需要的朋友可以参考下

    桶排序(Bucket Sort)

    桶排序算法是一种基于计数的排序算法,其基本思想是先扫描一遍待排序的序列,找出最大值和最小值,然后根据最大值和最小值确定桶的个数,并将每个元素分配到对应的桶中,最后将每个桶中的元素进行排序,然后依次输出...

    JavaScript桶排序算法1

    JavaScript桶排序算法桶排序算法桶排序(Bucket sort)也称箱排序,是一个排序算法,工作的原理是将数组分到几个桶里,桶的数量可由排序数组最大值与

    AlgorithmMan by Iori(Bucket Sort)

    BucketSort为AlgorithmMan中的桶排序演示工具(这是可执行文件;需要.net 4.0支持;非源代码)。 原文:C#算法设计排序篇之10-桶排序(附带动画演示程序) 链接:...

    常用算法(python)

    桶排序(Bucket Sort) 深度优先搜索(Depth-First Search, DFS) 广度优先搜索(Breadth-First Search, BFS) 二分查找(Binary Search) 线性查找(Linear Search) 素字符串匹配算法(Naive String Matching) ...

    全面的算法代码仓库全面的算法代码仓库

    桶排序 Bucket-Sort 笛卡尔树 Cartesian-Tree 求解多边形的重心 Centre-of-Gravity(Polygon) 组合数的递推求解 Combination(Recursion) 枚举组合 Combination 基本的复数类 Complex-Number 割点

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

    桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳...

    C经典算法之基数排序法

    基数排序法又称「桶子法」(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些「桶」中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),...

    几种常见排序算法实现

    1. 8 Radix sort(基数排序):从最低位开始,每位采用稳定的排序算法(如计数排序)。 1.9 Bucket sort:当输入数据比较均匀时采用。 先将数据区间分为n个桶,把数据分放到对应的桶中;对桶内的数据采用插入排序;...

    Java 实现 11 种排序算法

    冒泡排序,插入排序,希尔排序,选择排序,堆排序,归并排序,快速排序,桶排序,计数排序,基数排序,TimeSort排序

    python算法学习之桶排序算法实例(分块排序)

    复制代码 代码如下:# -*- coding: utf-8 -*- def insertion_sort(A): “””插入排序,作为桶排序的子排序””” n = len(A) if n &lt;= 1: return A B = [] # ...def bucket_sort(A): “””桶排序,伪码如下

    全面的算法代码库

    桶排序 Bucket-Sort 组合数的递推求解 Combination(Recursion) 枚举组合 Combination 基本的复数类 Complex-Number 割点 Cut-Vertex 深度优先搜索 Depth-First-Search 堆优化的Dijkstra算法 Dijkstra(Heap-...

    简单掌握桶排序算法及C++版的代码实现

    桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。 假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将...

    java十大排序算法实现

    java十大排序算法实现 1. 冒泡排序(Bubble Sort) 2. 选择排序(Selection Sort) 3. 插入排序(Insertion Sort) ...8. 桶排序(Bucket Sort) 9. 基数排序(Radix Sort) 10. 希尔排序(Shell Sort)

    14种经典排序算法C程序(强烈推荐)

    箱排序(桶排序)BinSort(int *array, int length) 或 BucketSort(int *array, int length) 2.基数排序 RadixSort(int *array, int length) 注意: 1.箱排序没有太大实用价值,主要是被基数排序所调用。该排序对...

    Python实现的桶排序算法示例

    本文实例讲述了Python实现的桶排序算法。分享给大家供大家参考,具体如下: 桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举出来,然后统计元素出现的次数。最后按顺序输出数据集里面的元素。 ...

    Python实现桶排序与快速排序算法结合应用示例

    本文实例讲述了Python实现桶排序与快速排序算法结合应用的方法。分享给大家供大家参考,具体如下: #-*- coding: UTF-8 -*- import numpy as np from QuickSort import QuickSort def BucketSort(a, n): barrel = ...

    C语言基本排序算法之桶式排序实例

    本文实例讲述了C语言基本排序算法之桶式排序。分享给大家供大家参考,具体如下: 桶式排序是对一个有n个整型元素的.../* Bucket_Sort.h 桶式排序算法 */ /* 问题:对一个有n个整型元素a[0],a[1],…,a[n-1]的数组排序

Global site tag (gtag.js) - Google Analytics