2013-09-27 2 views
0

Я хочу сортировать массив структур с помощью определенного члена с помощью quicksort. вот моя структура:как вызвать рекурсивно функцию, которая имеет массив структур как параметр

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); 

Это даст это я ошибка: ожидается unqualified-id перед токеном '*' |

Я не знаю, когда я называю это рекурсивно, как указать член. Я хочу его сортировать по ... Если это имеет смысл, пожалуйста, помогите мне. Благодаря

ответ

2

Легче, чем вы думаете, как этот

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

haha, спасибо, что сработало) –

0

Я предполагаю, что вы хотите сделать что-то вроде: «сортировать по й», «сортировать по у» в качестве вклада в функцию?

В этом случае вы не можете использовать указатель, поскольку он всегда указывает на конкретную переменную экземпляра.

Лучшим способом в этом случае может быть использование функции pass, например int get_sort_param(const struct points & p), и вызывать это в своем алгоритме сортировки всякий раз, когда вы являетесь отсортированным значением.

+0

Он не использует указатель, его указатель на элемент. Разные вещи целиком. – john

+0

Вы правы. Это работает по назначению. – dornhege

Смежные вопросы