///
/// 桶装排序
///
/// 数据源
/// 数组长度
/// 桶大小
static void bucketSort(int[] array, int len, int bucketsize = 4)
{
// 获取数组最大值与最小值
(int max, int min) = FindMaxAndMin(array, len);
List> buckets = new List>();
// 分配的桶数量
int bucketnum = (max - min) / bucketsize + 1;
// 初始化桶
for (int i = 0; i < bucketnum; i++)
{
buckets.Add(new List());
}
// 将数据放在对应的桶里
for (int i = 0; i < len; i++)
{
// 寻桶位置
int bucketIndex = (array[i] - min) / bucketsize;
buckets[bucketIndex].Add(array[i]);
}
int index = 0;
for (int i = 0; i < buckets.Count; i++)
{
// 对每个桶排序(可以使用其它排序,例如快排)
buckets[i].Sort();
for (int j = 0; j < buckets[i].Count; j++)
{
array[index++] = buckets[i][j];
}
}
}
static (int,int) FindMaxAndMin(int[] array,int len)
{
(int min, int max) = (array[0], array[0]);
for (int i=1;i< len; i++)
{
min = Math.Min(min, array[i]);
max = Math.Max(max, array[i]);
}
return (max, min);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)