C++ 快速排序给我 Stack Overflow
C++ Quick Sort giving me Stack Overflow
有人给了我伪代码,我的形式几乎都是正确的,但我不明白为什么每次我尝试 运行 在 [=15] 中快速排序时它都会给我一个 Stack Overflow =].下面是我做的函数。
template <typename T>
void quickSort(T list[], int lowerBound, int upperBound)
{
int i = lowerBound;
int j = upperBound;
T tmp;
T pivot = list[(lowerBound + upperBound)] / 2;
while (i <= j)
{
while (list[i] < pivot)
{
i = i + 1;
}
while (list[j] > pivot)
{
j = j - 1;
}
if (i <= j)
{
tmp = list[i];
list[i] = list[j];
list[j] = tmp;
i = i + 1;
j = j - 1;
}
}
if (lowerBound < j)
quickSort(list, lowerBound, j);
if (i < upperBound)
quickSort(list, i, upperBound);
}
谢谢!
将T pivot = list[(lowerBound + upperBound)] / 2;
改为
T pivot = list[(lowerBound + upperBound)/2];
有人给了我伪代码,我的形式几乎都是正确的,但我不明白为什么每次我尝试 运行 在 [=15] 中快速排序时它都会给我一个 Stack Overflow =].下面是我做的函数。
template <typename T>
void quickSort(T list[], int lowerBound, int upperBound)
{
int i = lowerBound;
int j = upperBound;
T tmp;
T pivot = list[(lowerBound + upperBound)] / 2;
while (i <= j)
{
while (list[i] < pivot)
{
i = i + 1;
}
while (list[j] > pivot)
{
j = j - 1;
}
if (i <= j)
{
tmp = list[i];
list[i] = list[j];
list[j] = tmp;
i = i + 1;
j = j - 1;
}
}
if (lowerBound < j)
quickSort(list, lowerBound, j);
if (i < upperBound)
quickSort(list, i, upperBound);
}
谢谢!
将T pivot = list[(lowerBound + upperBound)] / 2;
改为
T pivot = list[(lowerBound + upperBound)/2];