桶排序算法

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

本文地址:http://www.cnblogs.com/archimedes/p/bucket-sort-algorithm.html,转载请注明源地址。

桶排序以下列程序进行:

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

伪代码

function bucket-sort(array, n) is
  buckets ← new array of n empty lists
  for i = 0 to (length(array)-1) do
    insert array[i] into buckets[msbits(array[i], k)]
  for i = 0 to n - 1 do
    next-sort(buckets[i])
  return the concatenation of buckets[0], ..., buckets[n-1]

算法实现

// Completed on 2014.10.13 12:20
// Language: C99
//
// 版权所有(C)codingwu   (mail: oskernel@126.com)
// 博客地址:http://www.cnblogs.com/archimedes/
#include<stdio.h>
#include<stdlib.h>

typedef struct node {
    int value;
    struct node * next;
}node, *pnode;

void bucketSort(int a[], node bucket[], int n)
{
    int i = 0;
    pnode tmp, t;
    for(i = 0; i < n; i++) {
        tmp = &bucket[a[i] / 10];
        t = (pnode)malloc(sizeof(node));
        t->value = a[i];
        t->next = NULL;
        while(tmp != NULL) {
            if(tmp->next == NULL) {
                t->next = tmp->next;
                tmp->next = t;
                break;
            } else if (tmp->next->value > t->value) {
                t->next = tmp->next;
                tmp->next = t;
                break;
            } else {
                tmp = tmp->next;
            }
        }
    }
}

int main()
{
    node bucket[10];
    pnode tmp;
    int a[] = {12, 22, 34, 24, 24, 56, 77, 87, 15, 28, 57, 99};
    int size = sizeof(a) / sizeof(a[0]);
    for(int i = 0; i < 10; i++)
        bucket[i].next = NULL;
    bucketSort(a, bucket, size);
       for(int k = 0; k < 10; k++) {
        tmp = bucket[k].next;
        while(tmp != NULL) {
            printf("%d ", tmp->value);
            tmp = tmp->next;
        }
    }
    printf("\n");
    return 0;
}
时间: 2024-12-24 04:15:07

桶排序算法的相关文章

深入解析桶排序算法及Node.js上JavaScript的代码实现_node.js

1. 桶排序介绍桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序).当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n).桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响. 桶排序按下面4步进行: (1)设置固定数量的空桶. (2)把数据放到对应的桶中. (3)对每个不为空的桶中数据进行排序. (4)拼接从不为空的

大数据情况下桶排序算法的运用与C++代码实现示例_C 语言

箱排序的变种.为了区别于上述的箱排序,姑且称它为桶排序(实际上箱排序和桶排序是同义词). 桶排序的思想是把[0,1)划分为n个大小相同的子区间,每一子区间是一个桶.然后将n个记录分配到各个桶中.因为关键字序列是均匀分布在[0,1)上的,所以一般不会有很多个记录落入同一个桶中.由于同一桶中的记录其关键字不尽相同,所以必须采用关键字比较的排序方法(通常用插入排序)对各个桶进行排序,然后依次将各非空桶中的记录连接(收集)起来即可. 注意: 这种排序思想基于以下假设:假设输入的n个关键字序列是随机分布在

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

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序的一种归纳结果.当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n)).但桶排序并不是比较排序,他不受到O(n log n)下限的影响. 桶排序以下列程序进行: 1.设置一个定量的数组当作空桶子. 2.寻访序列,并且把项目一个一个放到对应的桶子去. 3.对每个不是空的桶子进行排

桶排序算法的理解及C语言版代码示例_C 语言

理解:桶排序是计数排序的变种,把计数排序中相邻的m个"小桶"放到一个"大桶"中,在分完桶后,对每个桶进行排序(一般用快排),然后合并成最后的结果.基本思想:桶排序假设序列由一个随机过程产生,该过程将元素均匀而独立地分布在区间[0,1)上.我们把区间[0,1)划分成n个相同大小的子区间,称为桶.将n个记录分布到各个桶中去.如果有多于一个记录分到同一个桶中,需要进行桶内排序.最后依次把各个桶中的记录列出来记得到有序序列.效率分析:桶排序的平均时间复杂度为线性的O(N+C

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

桶排序介绍桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里. 假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX).在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0:将容量为MAX的桶数组中的每一个单元都看作一个"桶". 在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标.当a中数据被读取时,就将桶的值加1.例如,读取到数组a[3]=5,则将r[5]的值+1. C++实现算法假设数据分

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

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

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

复制代码 代码如下: # -*- coding: utf-8 -*- def insertion_sort(A):    """插入排序,作为桶排序的子排序"""    n = len(A)    if n <= 1:        return A    B = [] # 结果列表    for a in A:        i = len(B)        while i > 0 and B[i-1] > a:      

经典白话算法之桶排序

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

Python实现八大排序算法(转载)+ 桶排序(原创)

插入排序 核心思想 代码实现 希尔排序 核心思想 代码实现 冒泡排序 核心思想 代码实现 快速排序 核心思想 代码实现 直接选择排序 核心思想 代码实现 堆排序 核心思想 代码实现 归并排序 核心思想 代码实现 基数排序 核心思想 代码实现 桶排序 核心思想 代码实现 测试结果 总结 排序算法,重要性不言而喻.现摘录一篇,转载至此,以供学习鉴赏. 插入排序 核心思想 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间