Я пытаюсь сортировать вектор дней рождения (используя мою реализацию quicksort), а также изменять порядок двух векторов, содержащих имена и даты рождения, в зависимости от того, как они меняются. Я следовал онлайн-источнику о том, как реализовать quicksort, но я не совсем уверен, почему он не будет работать. Вот мой код:Шаблон Quicksort не работает, и моя программа не отвечает
template <class T>
void sortBDay(vector<T> &birthday, vector<string> &name, vector<T> &birthdate, int startPos, int size) { // This template sorts all data by their birthday
if (startPos < size - 1) { // if the first value is less than the last value
T pivotVal = birthday[startPos]; // the pivot value is the vector's first value
int pivotPos = startPos; // the pivot position is the vector's starting position
for (int pos = startPos + 1; pos <= size; pos++) { // repeat for all values of vector
if (birthday[pos] < pivotVal) { // if the current position is less than the starting position
swap(birthday[pivotPos + 1], birthday[pos]);
swap(birthday[pivotPos], birthday[pivotPos + 1]); // switch the positions
swap(name[pivotPos + 1], name[pos]); // and their names
swap(name[pivotPos], name[pivotPos + 1]);
swap(birthdate[pivotPos + 1], birthdate[pos]); // and their birthdates
swap(birthdate[pivotPos], birthdate[pivotPos + 1]);
pivotPos++; // then go onto the next one
}
sortBDay(birthday, name, birthdate, startPos, size - 1); // do the same for upper and lower pivots
sortBDay(birthday, name, birthdate, startPos, size + 1); // recursion
}
}
}
Я не знаю, что случилось с этой реализацией. Любая помощь будет оценена! Заранее спасибо.
'pos <= size' - это не выглядит хорошо. Это было бы значительно чище, если бы все эти данные были в одном векторе объектов, а не в трех разных векторах. И fwiw, ['std :: partition'] (http://en.cppreference.com/w/cpp/algorithm/partition) делает короткую работу алгоритма быстрой сортировки, в том числе устраняя ошибки, сделанные здесь. Связанный документ даже имеет пример использования, который делает именно это; реализует quicksort. – WhozCraig
Нужно ли добавлять отдельную функцию раздела, или я могу сохранить все это вместе? – Cool
Вы можете сохранить все это вместе, если хотите использовать свой собственный алгоритм разделения, конечно. – WhozCraig