c-在带有指针的数组中找到最大数,并将它们的位置移到另一个数组



我现在用C语言做一个项目,项目的一部分有问题。基本上,我试图在我的主数组中找到最大M个数字,并将他们的ID号带到另一个数组。这些最大值的ID号是它们在数组中的位置。

我的主数组是tresh_arr,有N个数字,这些数字是双倍的。

我的代码块不起作用是:

    double max=0;
    int *max_arr;
    int k,tmp,flag=0;
    max_arr=calloc(M,sizeof(int));

for(i=0;i<M;i++)  //I will find maximum M numbers
{
    for(j=0;j<N;j++) //There is a N numbers in my array
    {
        if( *(tresh_arr+j) > max   ) //I'm trying to take the Id numbers to the tresh_arr
            {
                flag=0;
                for(k=0;k<i+1;k++) 
                {
                    if( *(max_arr+k)==j )
                    {   
                       flag=0;
                       break;
                    }
                    else 
                        flag=1; 
                }
                if(flag==1)
                {
                    max = *(tresh_arr+j);
                    tmp=j;
                }                               
            }
    }
    *(max_arr+i)=tmp;
}` 

但我的代码不起作用,只找到最大数,然后写这个最大数的Id的M倍。我该怎么办?谢谢你,如果有的话,对我的过错表示歉意。

以下是程序中的错误:

1) 在倒数第二行你应该做*(max_arr+i)=最大值;//非tmp

2) 在每个forloop内,我将最大值设置为最小值

for(i=0;i<M;i++)  //I will find maximum M numbers

 max =-1;    //**********YOU MISSED THIS*****************
for(j=0;j<N;j++) //There is a N numbers in my array
{

3) 在上面的break中,您应该将标志设置为1,而不需要再次将其设置为0,如果您应该检查标志==0,这基本上意味着元素没有找到

            for(k=0;k<i;k++) 
            {
                if( *(max_arr+k)==tresh_arr[j] )
                {  
                   flag=1;
                   break;
                }
            }
            if(flag==0)
            {
                max = *(tresh_arr+j);
                tmp=j;
            }  

在C中把*(A+j)写成A[j]也是很好的,它们完全相同,前面的有点过于冗长

最新更新