我正在尝试为一个函数编写一个代码,该函数获取一个值在 32 到 64 之间的数组(我们称之为 arr1),以及数组的大小(比如说大小 n)。该函数将以 O(n) 对数组进行排序。
我想这样做的方法是声明一个大小为 32 的第二个数组(我们称之为 arr2)并执行此操作:对于 0 和 n 之间的每个索引 i,我们将 1 放入 arr2 的点 [arr1[i]- 32]。因此,例如,如果对于当前 i,arr1[i]=40,那么我们将 1 放入 arr2 的 40-32、8 点。然后我们遍历 arr2,如果 arr2[i]==1 然后放入arr[j] 我输入 i+32, j++。理论上,现在应该对 arr1 进行排序。
我的问题是代码,当我将值分配给 arr2 时,我在“=”下方有一条小红线,当我将鼠标悬停在它上面时,它说“不能将 int 类型的值分配给 int* 类型”
void sort_array(int* arr1,int n)
{
int i=0,j=0;
int* arr2[32];
for(i=0;i<32;i++)
arr2[i]=0;
for(i=0;i<n;i++)
arr2[arr1[i]-32]=1;
for(i=0;i<32;i++)
if(arr2[i]==1)
{
arr1[j]=i+32;
j++;
}
}
我还想听听是否有人对如何在 O(n) 中对该数组进行排序有更好的建议。quicksort 和 mergesort 是 nlog(n) 谢谢。