ITPub博客

首页 > 应用开发 > > C++ 快速排序bug查找

C++ 快速排序bug查找

作者:lilyone 时间:2019-08-14 14:58:57 0 删除 编辑

include<iostream>

include<vector>

include<ctime>

using namespace std;

void print(const vector& vec)

{

for (auto ele : vec)

{

cout << ele << " ";

}

cout << endl;

}

//<5>快速排序

void quickSort(vector& 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 vec = { 6, 64, 2, 93, 3, 18, 88, 37, 7, 100 };

vector 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下。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4635/viewspace-3130927/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 数据库连接问题
请登录后发表评论 登录
全部评论

注册时间:2019-08-01

  • 博文量
    159
  • 访问量
    977