2

どのデータ型でも機能するように、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&)'

誰かがそれが何を意味し、どのようにそれを適合させるかを私に知らせることができれば、私は非常に感謝しています.

4

1 に答える 1

4

関数は、partition使用する前に宣言する必要があります。

partition定義を定義の前に移動するquicksortか、その場所に宣言を追加します。

template <class T1>
int partition(T1 set[], int start, int end);
于 2012-05-12T22:27:35.600 に答える