Я пытаюсь написать функцию быстрой сортировки для сортировки в пределах от 10 до 1 000 000 номеров. Он выполняет итерацию через все, но не сортирует, просто печатает вектор как есть.quicksort not sorting C++
По какой-то причине он слишком быстро выходит из линии while
. Тестовый ввод, который я использую: (3 6 2 5 1 7 9 10 4 8). И это выход: (1 2 6 5 3 7-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;
}
Когда вы проходите программу в отладчике, в какой момент фактическое состояние программы отклоняется от того, что вы ожидаете от состояния? –
, когда он доходит до 'temp = numbers [i];' он устанавливает его в '7', и я не совсем понимаю, почему. – Jmh2013