0

这是我第一次实际发送一个我在网络上或网站上找不到答案的问题。这是一项大学作业,通过合并排序对指针数组进行排序,指针将指向作为排序值给出的数组(排序指针指向的位置而不是 int 数组)。

这是我的函数代码:

void merge(int *a,int p,int q,int r)
{
    int i=p,j=q+1,k=0;
    int** temp=(int**)calloc(r-p+1, sizeof(int));
    int tempPtr;

    while ((i<=q)&& (j<=r))
        if(a[i]<a[j])
            temp[k++]=&a[i++];
        else
            temp[k++]=&a[j++];

    while(j<=r)   // if( i>q )
        temp[k++]=&a[j++];

    while(i<=q)   //  j>r
        temp[k++]=&a[i++];

    for(i=p,k=0; i<=r; i++,k++) //  copy temp[] to a[]
        a[i]=*temp[k];
    free(temp);
}

我不明白为什么更改 temp 指向的地址(作为要排序的最小数组)是不够的。任何人都可以帮助我如何解决这个问题?先谢谢了。

4

0 回答 0