0

我想使用快速排序按特定成员对结构数组进行排序。这是我的结构:

    struct points
{
    int x,y,apart;
};

和快速排序功能:

 void quicksort(points* a,int points::*member,int left, int right)

{
       int i=left, j=right, pivot=a[(i+j)/2].*member;
       while(i<j)
         {
             while(a[i].*member<pivot)
             i++;
             while(a[j].*member>pivot)
             j--;
                if(i<=j)
                  {
                      points tmp=a[i];
                      a[i]=a[j];
                      a[j]=tmp;
                      i++;j--;
                  }
         }
       if(left<j)
       quicksort(a,&points::*member,left,j);
       if(i<right)
        quicksort(a,&points::*member,i,right);
}

问题出在这两行代码中:

if(left<j)
       quicksort(a,&points::*member,left,j);
       if(i<right)
        quicksort(a,&points::*member,i,right);

它给了我错误:“*”令牌之前的预期不合格ID|

我不知道当我递归调用它时如何指定我想要对其进行排序的成员......如果有任何意义,请帮助我。谢谢

4

2 回答 2

2

比你想象的要容易,像这样

if(left<j)
   quicksort(a,member,left,j);
if(i<right)
   quicksort(a,member,i,right)
于 2013-09-27T15:35:51.627 回答
0

我假设您想做类似的事情:“按 x 排序”、“按 y 排序”作为函数的输入?

在这种情况下,您不能使用指针,因为它始终指向特定的实例变量。

在这种情况下,更好的方法可能是使用传递一个类似的函数,int get_sort_param(const struct points & p)并在您是排序值时在排序算法中调用它。

于 2013-09-27T15:39:53.423 回答