我試圖實現一個快速排序算法,通過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