转自: http://blog.csdn.net/weiwenhp/article/details/8618500
桶排序的思想和基数排序有点类似,都要借助临时空间.基数排序是先映射到大小为10的计数数组中,然后再映射到大小等于待排序数组长度的临时数组中.
而桶排序就是直接整个足够大的临时数组,把待排序的元素全部映射过来.其索引为待排序元素数值.所以为了确定临时数组的大小得先算出数组中最大数.
简单桶排序
简单桶排序的缺点很明显
1.不能有重复的元素.
2.元素不能为负数.
int GetMaxVal(int* arr, int len) { int maxVal = arr[0]; for (int i = 1; i < len; i++) { if (arr[i] > maxVal) maxVal = arr[i]; } return maxVal; } void SimpleBucketSort(int* arr, int len) { int tmpArrLen = GetMaxVal(arr, len) + 1; //因为数组索引是从0开始,所以数组得是最大数加1 int* tmpArr = new int[tmpArrLen]; int i, j; for (i = 0; i < tmpArrLen; i++) tmpArr[i] = -1; //把临时数组的值全部赋予-1,如果赋予0的话待排序数组中有0值就不能排序了 for (i = 0; i < len; i++) tmpArr[arr[i]]++; for (i = 0, j = 0; i < tmpArrLen; i++) { if (tmpArr[i] != -1) { arr[j] = tmpArr[i]; j++; } } }
对于第2点我们无能为力,但对于第一点可以改进下.
改进的桶排序
因为临时数组的索引就是待排序数组元素的值了,所以临时数组中可以不必再存储元素的值了.此时先把临时数组全部赋值为0,当有元素映射过来时就加1,有重复有元素就大于1
public static void BucketSort(int[] arr, int len, int max) { int[] count = new int[max + 1]; for (int i = 0; i < len; i++) count[arr[i]]++; for (int i = 0, j = 0; i < count.Length; i++) { while (count[i] != 0) { arr[j] = i; j++; count[i]--; } } }
相关推荐
提供的`bucketSort.cc`文件可能包含一个桶排序的C++实现,通过阅读源代码,你可以深入理解桶排序的具体步骤和细节,包括映射函数的设计、桶的创建和数据的分布等。 桶排序是一种非常实用的排序算法,尤其在处理大...
多趟桶式排序bucket sort。数据输入:有10个数,范围为0到999。 [root@lumotuwe] gcc cas.c -o cas [root@lumotuwe] ./cas 64 8 216 512 27 729 0 1 343 125
桶排序算法是一种基于计数的排序算法,其基本思想是先扫描一遍待排序的序列,找出最大值和最小值,然后根据最大值和最小值确定桶的个数,并将每个元素分配到对应的桶中,最后将每个桶中的元素进行排序,然后依次输出...
MPI bucket排序代码 用于mpi联系 熟悉bucket排序
在提供的文件名列表中,"bucketsort.c"和"BucketSort.cpp"可能是实现MPI桶排序的具体代码。其中,"bucketsort.c"可能使用C语言编写,而"BucketSort.cpp"则可能采用C++语言。这两个文件通常会包含以下部分: 1. **...
在本主题中,我们将深入探讨一种特殊的排序算法——**BucketSort(桶排序)**,并将其与C语言的实现相结合。 **BucketSort**是一种分布式排序算法,其核心思想是将待排序的数据分布到若干个有序的“桶”中,每个桶...
C++桶排序是一种非比较型排序算法,它的工作原理是将一组元素分布到有限数量的“桶”里,每个桶再个别排序,最后按顺序连接所有桶得到有序序列。这种算法特别适合排序范围很广的集合。桶排序常用于将数据均匀分布在...
BucketSort为AlgorithmMan中的桶排序演示工具(这是可执行文件;需要.net 4.0支持;非源代码)。 原文:C#算法设计排序篇之10-桶排序(附带动画演示程序) 链接:...
桶排序(Bucket Sort)是一种分布式排序算法,它将要排序的数据分布到多个“桶”中,每个桶再分别进行排序,最后将所有桶中的数据合并,得到全局有序的结果。在iOS开发中,桶排序可以被用于优化大规模数据的排序过程...
C++实现的BucketSort涉及到的关键概念包括桶的创建、数据分布、桶内排序和结果合并。在实际编程时,需要灵活地调整桶的数量和大小,以适应不同类型的输入数据,同时选择合适的桶内排序算法,以达到最佳的排序效果。...
桶排序(Bucket Sort)是一种分布式排序算法,它将待排序的数据分布到多个“桶”中,每个桶再分别进行排序,最后将所有桶中的数据合并,得到全局有序的结果。这个算法通常适用于数据分布均匀的情况,如果数据在一定...
桶排序(Bucket Sort)是一种非比较型的排序算法,它基于分布排序的原理,通过将待排序的数据分到几个有序的桶里,每个桶再分别排序,最后将所有桶中的数据合并成一个有序序列。这种算法特别适用于数据分布均匀的...
例如,提供的`BucketSort.docx`文件可能包含了桶排序的详细步骤、代码示例以及不同情况下的性能分析。通常,这样的文档会讲解如何创建和管理桶,如何选择合适的排序算法对桶内元素排序,以及如何优化桶排序的实现以...
桶排序(Bucket Sort)是一种分布式排序算法,它将要排序的数据分到几个有序的桶里,每个桶再分别排序,最后按照每个桶内元素的顺序依次取出,组合成整体的有序序列。这种算法适用于数据分布相对均匀的情况。下面...
桶排序(Bucket Sort)是一种分布式排序算法,它将要排序的数据分布到多个“桶”中,每个桶再分别进行排序,最后将所有桶中的数据合并,得到全局有序的结果。桶排序算法的时间复杂度在最理想情况下可以达到线性的O(n...
随机产生一定范围内的随机数,进行桶排序,然后二分查找任意个数的数。
桶排序(Bucket Sort)是一种分布式排序算法,常用于大数据处理和流式计算中。它将待排序的数据分布到多个“桶”中,每个桶再独立地进行排序,最后按照桶的顺序依次取出桶中的元素,形成有序序列。桶排序的核心思想...
桶排序(Bucket Sort)是一种分布式排序算法,它将要排序的数据分布到多个“桶”中,每个桶再分别进行排序,最后将所有桶中的数据合并,得到全局有序的结果。桶排序算法基于分治策略,其核心思想是将待排序序列均匀...
桶排序(Bucket Sort)是一种分布式的排序算法,它将元素分布到多个“桶”中,然后对每个桶分别进行排序,最后再将所有桶中的元素合并成一个有序序列。桶排序的基本思想是假设输入数据服从均匀分布,通过将数据分到...