C++-关于快速排序的一个C语言问题
请看如下这个问题
void print(int *a, int len)
{
for(int i = 0; i < len; i++)
cout << a[i] << ' ';
cout << endl;
}
void quickSort(int *a, int first, int last)
{
if(first >= last)
return ;
int pos = a[last];
int j;
for(int i = first, j = first; i < last; i++)
{
if(a[i] <= pos)
swap(a[i], a[j++]);
}
cout << "j = " << j << endl;
swap(a[j], a[last]);
print(a, last - first + 1);
}
int main()
{
int b[] = {1, 5, 2, 4, 3};
int len_b = sizeof b / sizeof b[0];
quickSort(b, 0, len_b - 1);
print(b, len_b);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果你把for里面的int放到外面,那上面声明的i和j才是初始化为first!
所以改后输出才没问题,改前编译就会有warning的啊..
编译成功,1个warning,就是上面说的j的问题!
完全可以 工程完全没有声明全局变量j
或许真是人品问题 vs2010 没问题
我在VS2008里面跑了一下你的代码,发现了一个问题:
int j;
for(int i = first, j = first; i < last; i++)
{
if(a[i] <= pos)
swap(a[i], a[j++]);
}
cout << "j = " << j << endl;
这段代码在VS2008里会由于定义的问题导致cout执行失败,修改之后输出结果是正确的,与你所说不一样。