首页 新闻 搜索 专区 学院

C++ 快速排序bug查找

0
悬赏园豆:15 [待解决问题]

include<iostream>

include<vector>

include<ctime>

using namespace std;

void print(const vector<int>& vec)
{
for (auto ele : vec)
{
cout << ele << " ";
}
cout << endl;
}

//<5>快速排序
void quickSort(vector<int>& vec, int start, int end)
{
// 假色vec 原始: 4 2 8 0 5 7 1 3 9
int i = start;
int j = end;
//基准数
int temp = vec[start]; // temp = 4 // [] 2 8 0 5 7 1 3 9
if (i < j)
{
while (i < j)//循环退出的时候 i = j
{
//从右向左找到比i指向元素小的元素来填上面的[]
while (i < j && vec[j] >= temp)
{
j--;
}//这里找到了3,下面准备入坑(上面的[] )
if (i < j)
{
vec[i] = vec[j];// 3 2 8 0 5 7 1 [] 9
i++;//准备从左向右找一个比基准数大的数
}
//从左向右找到比i指向元素大的元素来填上面的[]
while (i < j && vec[i] < temp)
{
i++;
}//这里找到了8,下面准备入坑
if (i < j)
{
vec[j] = vec[i];// 3 2 [] 0 5 7 1 8 9
j--;
}
}
//此时将基准数放到 i的 位置(此时 i = j; 且左边都比vec[i]小,右边都比vec[i]大)
vec[i] = temp; //3 2 1 0 4 5 8 9
quickSort(vec, start, i - 1); //递归,对左边
quickSort(vec, i + 1, end); //递归,对右边

}

}

int main()
{
//vector<int> vec = { 6, 64, 2, 93, 3, 18, 88, 37, 7, 100 };
vector<int> vec = { 17, 10, 84, 24, 42, 79, 32, 77, 29, 28 };
print(vec);
int start = 0; int end = vec.size() - 1;
quickSort(vec, start, end);
print(vec);
return 1;
}

【问题:】main()函数第一行案例(以及绝大数案例)都可顺利排序,打印输出
第二行案例,报错,数组越界,实在无解,求解大神帮忙debug下。

JackRuiYu的主页 JackRuiYu | 初学一级 | 园豆:188
提问于:2018-09-05 13:12
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册