[英]Implementing Bucket Sort and Counting Sort Without Using Dynamic Memory Allocation
我在 C++ 中练习排序算法,我应该在不使用向量的情况下实现算法。 所以未排序的数组大小可以在开始时决定#define ARR_SIZE 25
并且元素是从均匀分布的随机数中选择的。
void Sorters::InitializeArray()
{
for (int i = 0; i < ARR_SIZE; i++) {
arr[i] = uniformRandom.RandomlyDistribute(LOWER_ARRAY_LIMIT, UPPER_ARRAY_LIMIT);
}
}
随机数的下限是#define LOWER_ARRAY_LIMIT 0
,上限是#define UPPER_ARRAY_LIMIT 200
。 我实现了一个冒泡排序,它是
void Sorters::BubbleSort(int arr[], int arraySize)
{
for (int k = 0; k < arraySize; k++)
for (int i = 0; i < arraySize - k - 1; i++)
if (arr[i] > arr[i + 1]) {
temporaryVal = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temporaryVal;
}
}
但是,我在桶排序和计数排序方面遇到了麻烦。 我该如何实施它们? 在桶排序中,由于不是动态的,我将如何决定每个桶的大小? 谢谢你。
桶排序:
您可以就地进行桶排序,因此无需分配额外的空间。 只需根据二进制表示进行桶排序。 这是伪代码:
bucket_sort_int(arr, lower, upper, bit):
if bit == -1:
return
l, u = lower, upper
while l < u:
if ~bitmask(bit) & arr[l]:
l++
else if bitmask(bit) & arr[u]:
u--
else:
arr[l], arr[u] = arr[u], arr[l]
l++
u--
bucket_sort_int(arr, lower, u, bit - 1)
bucket_sort_int(arr, u + 1, upper, bit - 1)
bucket_sort(arr):
bucket_sort_int(arr, 0, len(arr) - 1, sizeof(arr[0]) * 8 - 1)
基本上简单地按最高有效位对数组进行分区,按下一个最高有效位对每个分区进行排序,然后递归地应用它,直到对整个数组进行排序。
计数排序:
无论如何,都需要事先知道arr
中可能值的范围。 所以无论如何都不需要使用动态数组。 只需使用预定义长度的全局数组和标准算法就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.