不使用动态内存分配实现桶排序和计数排序 我在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); } }

不使用动态内存分配实现桶排序和计数排序 我在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); } },c++,algorithm,sorting,counting-sort,bucket-sort,C++,Algorithm,Sorting,Counting Sort,Bucket Sort,然而,我在桶排序和计数排序方面有困难。我如何实施它们?在桶排序中,由于不是动态的,我将如何决定每个桶的大小?谢谢。桶排序: 您可以就地进行桶排序,因此无需分配额外的空间。只需基于二进制表示进行桶排序。以下是伪代码: bucket_sort_int(arr, lower, upper, bit): if bit == -1: return l, u = lower, upper while l < u: if ~bitmask

然而,我在桶排序和计数排序方面有困难。我如何实施它们?在桶排序中,由于不是动态的,我将如何决定每个桶的大小?谢谢。

桶排序:

您可以就地进行桶排序,因此无需分配额外的空间。只需基于二进制表示进行桶排序。以下是伪代码:

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)
bucket\u sort\u int(arr、下限、上限、位):
如果位==-1:
返回
l、 u=下,上
而l
基本上,只需按最高有效位对数组进行分区,按下一个最高有效位对每个分区进行排序,然后递归地应用该方法,直到对整个数组进行排序

计数排序:

无论如何,
arr
中可能值的范围需要事先知道。因此,无论如何都不需要使用动态数组。只需使用预定义长度的全局数组和标准算法,就可以了。

谢谢您的回答。对不起,既然我是初学者,我需要问一下如何使用~bitmask。如果我要使用“~bitmask(bit)”和“bitmask(bit)”的话,你有什么例子吗。另外,就数据类型而言,位的类型应该是什么@Paul@Metalian
位掩码(n)
只是位
n
的位掩码。所以基本上
位掩码(n)=1
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)