ソートするベクトルの最初、最後、および中央の要素の中央値を取得して、クイックソートのピボットを選択しようとしています。int の範囲で多くの実装を見てきましたが、イテレータを使用してそれを実行しようとしていました (とにかくそれほど異なるべきではありません)。ただし、私のコードは、私がやりたいことをまったく実行しません。T が int の場合は機能しますが、他のクラスではタイムアウトします。何か案は?コードは次のとおりです。
template <class T>
int ParallelSort::partition(typename vector<T>::iterator &start, typename vector<T>::iterator &end)
{
int Index = (end-start)/2;
T tmpSwap = start[Index];
//the three if statement get the three part median for the vector.
if(start[Index] < *start)
{
start[Index] = *start;
*start = tmpSwap;
}
if(*end < *start)
{
tmpSwap = *end;
*end = *start;
*start = tmpSwap;
}
if(*end < start[Index])
{
tmpSwap = start[Index];
start[Index] = *end;
*end = tmpSwap;
}
T pivot = start[Index];
//rest of the code .....
//i'm sure that the rest of the code works correctly