Я пытаюсь реализовать алгоритм быстрой сортировки для сортировки массива, заполненного объектами типа «Фильм» одним из 4-х разных критериев. Каждый объект фильма содержит рейтинг, количество голосов, рейтинг и название фильма. Я также написал 4 статические функции bool в определении класса, которые берут две ссылки на объект фильма и возвращают true, если первый меньше, или возвращает false, если он больше.C++: Передача функции от одной функции к другой
Ex:
bool Movie::GetLowerRank(const Movie& x, const Movie& y){
if (x.rank < y.rank)
return true;
else
return false;
}
Как я сказал, что я пытаюсь реализовать алгоритм быстрой сортировки, который будет сортировать массив на основе предпочтений пользователя. Я хочу передать одну из моих 4 функций сортировки моей функции quicksort, подобно тому, как работает сортировка векторов. Моя проблема заключается в том, что у меня есть две QuickSort функции, рекурсивная и основание:
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;
}
Я пытался добавить параметр функции в списке параметров, но я не могу понять, как иметь пустот QuickSort проход функция (которая получается в основном) для int quickSort, которая фактически использует ее.
Ваш 'void quickSort' видел прототип для вашего' int quickSort', прежде чем он попытается называть его? –
Является ли ваша функция GetLowerRank статической? –
Существует некоторая разница между вашей фактической функцией, которая принимает два 'const Movie &' и прототипы 'quickSort', которые берут два' Movie & '. – syam