C 使用指针查找数组中的最大数并将其位置移到另一个数组

C 使用指针查找数组中的最大数并将其位置移到另一个数组,c,arrays,C,Arrays,我现在正在用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++) //

我现在正在用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;
}` 
double max=0;
int*max_arr;
int k,tmp,flag=0;
max_arr=calloc(M,sizeof(int));

对于(i=0;i,以下是您的程序中的错误:

1) 在最后一行的第二行,你应该这样做 *(max_arr+i)=max;//不是tmp

2) 在每个forloop中,我将max设置为最小值

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

for(i=0;iDebugger………..如果你对数组进行排序并取M最大值怎么办?*(max\u arr+i)=tmp,因为我取的是最大值的位置,而不是它本身。我试图更改代码,如你所示,但仍然不起作用。也感谢你的写作建议。如果(*(max\u arr+k)=tresh\u arr[j]),则更改此比较//tresh_arr[j]by j参见这里,您的代码工作我试图将它们的位置设置为max_arr,例如max_arr=[8,7,6,5,4]应该是结果,因为max 5的数字是9,8,7,6,5,而8,7,6,5,4是它们在数组中的位置。我为实际元素编写了一个数组,但您可以简单地更改它,否则它的工作很好(打印元素9,8,7,6,5)请看我对代码流所做的更改
 max =-1;    //**********YOU MISSED THIS*****************

for(j=0;j<N;j++) //There is a N numbers in my array
{
            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;
            }