2013-09-27 50 views
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); 

它给的我的错误:预期'*'标记之前的非限定标识|

我不知道我什么时候递归调用它如何指定我想要排序的成员... 如果它有任何意义,请帮助我。 感谢

回答

2

比你想象,像这样

if(left<j) 
    quicksort(a,member,left,j); 
if(i<right) 
    quicksort(a,member,i,right) 
+0

哈哈,谢谢,那工作) –

0

我假设你想要做的事,如:“用y排序”“通过X轴排序”,作为输入的功能?

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

在这种情况下更好的方法是使用传递函数int get_sort_param(const struct points & p),并在排序算法中调用此函数。

+0

他没有使用指针,它的一个成员指针。完全不同的事情。 – john

+0

你说得对。这按预期工作。 – dornhege

相关问题