C++ 如何递归调用以结构数组作为参数的函数
我想使用快速排序按特定成员对结构数组进行排序。 这是我的结构:C++ 如何递归调用以结构数组作为参数的函数,c++,arrays,recursion,struct,quicksort,C++,Arrays,Recursion,Struct,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) {
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);
}
void快速排序(点*a,int点::*成员,int左,int右)
{
int i=左,j=右,pivot=a[(i+j)/2].*成员;
而(我比你想象的要容易,像这样
if(left<j)
quicksort(a,member,left,j);
if(i<right)
quicksort(a,member,i,right)
if(left我假设您想执行类似于“按x排序”、“按y排序”的操作作为函数的输入
在这种情况下,您不能使用始终指向特定实例变量的指针
在这种情况下,更好的方法可能是使用传递函数,如int get_sort_param(const struct points&p)
,并在排序算法中调用它,只要你是排序值。他没有使用指针,而是成员指针。完全不同。
if(left<j)
quicksort(a,member,left,j);
if(i<right)
quicksort(a,member,i,right)