如何递归调用具有结构数组作为参数的函数

how to call recursively a function that has an array of structs as parameter

本文关键字:数组 结构 参数 函数 何递归 递归 调用      更新时间:2023-10-16

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

    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|

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

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

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

我假设你想做这样的事情:"按x排序","按y排序"作为函数的输入?

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

在这种情况下,更好的方法可能是使用像 int get_sort_param(const struct points & p) 这样的函数传递,并在排序算法中调用它,只要你是排序值。