2013-09-27 46 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

相關問題