桶排序总结

数据结构排序算法之——桶排序(Bucket sort)

插入排序想关链接:

维基百科:https://zh.wikipedia.org/wiki/%E6%A1%B6%E6%8E%92%E5%BA%8F

极客学院想关介绍:http://wiki.jikexueyuan.com/project/easy-learn-algorithm/bucket-sort.html

桶排序主要用于有大量重复数据和明确知道数据边界的情况下,进行统计的排序

基本的算法思想是:

假设数据的边界的长度为arrayLen,那么就定义一个长度为ArrarLen+1的数组,用来记录数组中每个元素的出现的次数,统计完成后,将这个数组作为指标,进行输出。

源码如下:

/* 函数的参数说明

 * int array[] 需要进行排序的原数组

 * int ArrayLen 待排序的数组的数据域的宽度

 */

void TubSort(int array[], int ArrayLen)

{

    // 开辟一个比数据界限(ArrayLen)大一个的数组来存储每个元素出现的次数

    ++ArrayLen;

 

    int *arr = (int *)malloc(sizeof(int)*ArrayLen);

    if (arr == NULL)

        return;

    for (int i = 0; i < ArrayLen; ++i)

        arr[i] = 0;

    // 扫描数组中的每个数据,统计出现的次数

    for (int i = 0; i < MAXSIZE; ++i)

    {

        arr[array[i]]++;

    }

    for (int i = 0; i < ArrayLen; ++i)

    {

        for (int j = 0; j < arr[i]; ++j)

        {

            printf("%d ", i);

        }

        printf(" ");

    }

    free(arr);

}

原文地址:https://www.cnblogs.com/bkcarlos/p/5875560.html