【发布时间】:2013-05-07 21:06:28
【问题描述】:
我正在尝试实现一个快速排序算法,以根据 4 个不同标准之一对填充了“电影”类型的对象的数组进行排序。每个电影对象都包含一个排名、票数、评级和电影名称。我还在类定义中编写了 4 个静态 bool 函数,它们接受两个电影对象引用,如果第一个更小则返回 true,如果更大则返回 false。
例如:
bool Movie::GetLowerRank(const Movie& x, const Movie& y){
if (x.rank < y.rank)
return true;
else
return false;
}
就像我说的那样,我正在尝试实现一个快速排序算法,该算法将根据用户偏好对数组进行排序。我想将我的 4 个排序函数之一传递给我的快速排序函数,类似于向量排序的工作方式。我的问题是我有两个快速排序函数,递归函数和基函数:
void quickSort(Movie array[], int min, int max, bool (*compare_function)(Movie&, Movie&)){
if (min < max) {
int pivot_i = (min + max)/2;
int pivot_i2 = quickSort(array, min, max, pivot_i, compare_function);
quickSort(array, min, pivot_i2 - 1);
quickSort(array, pivot_i2 +1, max);
}
}
int quickSort(Movie array[], int min, int max, int pivot, bool (*compare_function)(Movie& a, Movie& b)){
Movie pivot_entry = array[pivot];
swap (array[pivot], array[max]);
int pivot_final_index = min;
for (int i = min; i < max; i++) {
if(compare_function(array[i], pivot_entry)){
swap(array[i], array[pivot_final_index]);
++pivot_final_index;
}
}
swap(array[max], array[pivot_final_index]);
return pivot_final_index;
}
我试图将函数参数添加到参数列表中,但我不知道如何让 void quickSort 将函数(在 main 中获得)传递给实际使用它的 int quickSort。
【问题讨论】:
-
在尝试调用您的
void quickSort之前,您的int quickSort是否已看到原型? -
您的 GetLowerRank 函数是静态的吗?
-
您的实际函数采用两个
const Movie&与采用两个Movie&的quickSort原型之间存在差异。 -
您可以省去实现的麻烦并使用
std::sort(采用自定义谓词的重载)。 -
是的,所有布尔比较函数都是静态的。感谢您指出差异,我已经修复了它们。我知道我可以只使用 STL 算法,但我想尝试实现它只是为了我自己的理解和知识。
标签: c++ function parameters