首页 > 代码库 > 桶排序总结
桶排序总结
数据结构排序算法之——桶排序(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("\n");
}
free(arr);
}
桶排序总结