我试图实现一个快速排序算法,通过4种不同的标准之一来对填充了“Movie”类型的对象的数组进行排序。每个电影对象都包含排名,投票数量,评分和电影名称。我还在类定义中编写了4个静态布尔函数,它接受两个电影对象引用,如果第一个较小,则返回true;如果较大,则返回false。C++:将函数从一个函数传递到另一个函数
例:
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;
}
我试图函数参数添加到参数列表,但我无法弄清楚如何有空隙通快速排序该函数(主要获得)到实际使用它的int quickSort。
你的'void quickSort'在你尝试调用它之前看到了你的'int quickSort'的原型吗? – 2013-05-07 21:10:02
你的GetLowerRank函数是静态的吗? – 2013-05-07 21:10:30
您的实际功能需要两个'常规电影&'和'quickSort'原型需要两个'Movie&'之间存在差异。 – syam 2013-05-07 21:11:28