Quicksort模板不起作用,并使我的程序无响应

时间:2016-03-21 04:06:22

标签: c++ algorithm quicksort

我正在尝试对生日的矢量进行排序(使用我的quicksort实现),并根据它们的变化方式更改包含名称和生日的两个向量的顺序。我关注了如何实现快速排序的在线资源,但我不确定为什么它不起作用。这是我的代码:

OverallStartDepth

我不知道这个实现有什么问题。任何帮助,将不胜感激!提前谢谢。

1 个答案:

答案 0 :(得分:2)

你把一个递归放在一个循环中,这不是快速排序的工作方式。传递给递归函数的开始和结束位置不正确。

这是修复。我将参数size更改为end,因为这就是代码中变量的行为方式。

template <class T>
void sortBDay(vector<T> &birthday, vector<string> &name, vector<T> &birthdate, int startPos, int end) { // This template sorts all data by their birthday
    if (startPos < end - 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 < end; 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, pivotPos); // do the same for upper and lower pivots
        sortBDay(birthday, name, birthdate, pivotPos + 1, end); // recursion
    }
}