10から1,000,000の数値をソートするクイックソート関数を作成しようとしています。すべてを繰り返しますが、並べ替えはせず、ベクトルをそのまま出力します。
何らかの理由で、ループから飛び出すのがwhile
早すぎます。私が使用しているテスト入力は次のとおりです:(3 6 2 5 1 7 9 10 4 8)。そしてそれは出力です:(1 2 6 5 3 7 9 10 4 8)
int main()
{
std::cout << "Which file would you like to sort?\n";
std::cin >> file;
std::ifstream in(file.c_str());
// Read all the ints from in:
std::copy(std::istream_iterator<int>(in), std::istream_iterator<int>(),
std::back_inserter(numbers));
int max = numbers.size();
quickSort(numbers, 0, max-1);
// Print the vector with tab separators:
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, "\t"));
std::cout << std::endl;
return 0;
}
void quickSort(vector<int> &numbers, int start, int end)
{
int i = start;
int j = end;
int pivot=numbers[start];
int temp;
while( i != j )
{
while( numbers[i] < pivot && i < j)
i++;
while( numbers[j] >= pivot && i < j)
j--;
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
if( j < start )
{
quickSort( numbers, start, j );
}
if( i < start )
{
quickSort( numbers, i, end);
}
}
return;
}