У меня проблема с пересмотром функции C++, так что она работает с любым типом данных. Любая помощь будет чрезвычайно оценена. Ниже мой код и ошибка, с которой я сталкиваюсь.C++: проблема с шаблоном функции
// This program demonstrates the QuickSort Algorithm.
#include <iostream>
#include <algorithm>
using namespace std;
//************************************************
// quickSort uses the quicksort algorithm to *
// sort set, from set[start] through set[end]. *
//************************************************
template <class T>
void quickSort(T set[], int start, int end)
{
T pivotPoint;
if (start < end)
{
// Get the pivot point.
pivotPoint = partition(set, start, end);
// Sort the first sub list.
quickSort(set, start, pivotPoint - 1);
// Sort the second sub list.
quickSort(set, pivotPoint + 1, end);
}
}
//**********************************************************
// partition selects the value in the middle of the *
// array set as the pivot. The list is rearranged so *
// all the values less than the pivot are on its left *
// and all the values greater than pivot are on its right. *
//**********************************************************
template <class T1>
int partition(T1 set[], int start, int end)
{
int pivotValue, pivotIndex, mid;
mid = (start + end)/2;
swap(set[start], set[mid]);
pivotIndex = start;
pivotValue = set[start];
for (int scan = start + 1; scan <= end; scan++)
{
if (set[scan] < pivotValue)
{
pivotIndex++;
swap(set[pivotIndex], set[scan]);
}
}
swap(set[start], set[pivotIndex]);
return pivotIndex;
}
//**********************************************
// swap simply exchanges the contents of *
// value1 and value2. *
//**********************************************
template <class T>
void swap(T &value1, T &value2)
{
int temp = value1;
value1 = value2;
value2 = temp;
}
int main()
{
const int SIZE = 10; // Array size
int count; // Loop counter
// need to override the [] function?
int array[SIZE] = {7, 3, 9, 2, 0, 1, 8, 4, 6, 5};
// Display the array contents.
for (count = 0; count < SIZE; count++)
cout << array[count] << " ";
cout << endl;
// Sort the array.
quickSort(array, 0, SIZE - 1);
// Display the array contents.
for (count = 0; count < SIZE; count++)
cout << array[count] << " ";
cout << endl;
return 0;
}
Для линии, которая читает pivotPoint = partition(set, start, end);
в функции quicksort()
, я получаю эту ошибку:
main.cpp:24: error: no matching function for call to 'partition(int*&, int&, int&)'
Если кто-то может позволить мне знать, что это значит, и как установить его, я был бы очень признательна.
Там уже находится алгоритм [ 'станд :: partition'] (http://en.cppreference.com/w/CPP/алгоритм/раздела). Остановите 'abusing namespace std'' и произнесите это самостоятельно. –
Спасибо за быстрый ответ @KerrekSB. Я не уверен, что полностью понимаю, что вы говорите. –
Вам нужно подумать о том, как ваши функции называются. 'quickSort' вызывает функцию' partition' до ее определения, а 'partition' вызывает функцию' swap' до ее определения. Кроме того, тип 'pivotPoint' не должен быть' T', а 'int' в вашем случае. Если это не домашняя работа, посмотрите на использование 'std :: swap',' std :: partition' (и даже 'std :: sort'). – Chad