无法将类型int赋值为int *类型

时间:2013-02-04 10:50:43

标签: c arrays sorting int

我正在尝试为一个函数编写一个代码来获取一个数组(让我们称之为arr1),其值介于32和64之间,以及数组的大小(比方说大小为n)。该函数将在O(n)中对数组进行排序。

我想这样做的方法是声明一个大小为32的第二个数组(让我们称之为arr2)并执行以下操作: 对于0和n之间的每个索引i,我们在arr2中将1放在[arr1 [i] -32]中。所以例如,如果对于当前的i,arr1 [i] = 40,那么我们将arr2中的1放在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) 感谢。

2 个答案:

答案 0 :(得分:2)

问题在于:

int* arr2[32];

此行应为

int arr2[32];

因为arr2包含计数器,而不是指针。这就是为1分配arr2失败的原因。

现在让我们讨论一下您的算法:对于具有重复值的数组,您尝试实施counting sort会中断,因为无论您找到项目的次数多少,都会将arr2[arr1[i]-32]设置为1。您应该将其更改为arr2[arr1[i]-32]++,并使用计数将那么多计数值放入结果数组中。请参阅维基百科文章中的伪代码一个正确的实现。

这是a table comparing performances of various sorting algorithms。查找第二个表,其中包含非比较排序的详细信息。

答案 1 :(得分:0)

int *arr2[32];

应该是

int arr2[32];

前者声明了一个包含32个指针的数组。