快速排序中的无限循环
Infinite loop in Quick Sort?
当我运行这个程序时,我可以到达输入数字的阶段,但代码在此之后就停止工作了。
光标闪烁,但我不能做任何事情,也不能输入任何其他内容。如果代码中有错误,请指出来,或者如果是一般错误,那么请给我启发。
#include<iostream>
using namespace std;
void sort(int *a, int o, int p, int r);
int main()
{
int a[10],i,o=5,p=0,r=9;
cout<<"Enter the elments n";
for(i=0; i<10; i++)
{
cin>>a[i];
}
sort(a,o,p,r);
cout<<"n The Sorted Array is";
for(int yy=0; yy<10; yy++)
{
cout<<a[yy]<<"n";
}
system("PAUSE");
return 0;
}
void sort(int *a, int o, int p, int r)
{
int ii=0,kj=10,uu,uv,tmp;
if(p<r)
{
while((ii<10)&&(kj>0)){
while(ii<=o){
ii++;
}
while(kj>=o){
kj--;
}
if(ii<kj)
{
tmp=a[ii];
a[ii] = a[kj];
a[kj] = tmp;
}
}
uu=(p+o)/2;
uv=(r+o)/2;
sort(a,uu,p,o);
sort(a,uv,o,r);
}
}
为什么在排序例程中比较索引?你不应该比较值索引吗?
你认为这应该做什么?
void sort(int *a, int o, int p, int r)
{ // call in with o=5, p=0, r=9
int ii=0,kj=10,uu,uv,tmp;
if(p<r)
{
while((ii<10)&&(kj>0)){
while(ii<=o){
ii++;
} // ii is now 6
while(kj>=o){
kj--;
} // kj is now 4
if(ii<kj) // NEVER true
{
tmp=a[ii];
a[ii] = a[kj];
a[kj] = tmp;
}
} // infinite loop
同样重要的是,为什么要使用硬编码的值5作为枢轴值?为什么叫它o
而不是p
呢?只有是不言而喻的,或是用注释解释的。
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 如何修复我的快速排序实现?
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- C++中的无限递归快速排序
- 单排序链表-无限循环
- 计数排序无限循环
- 有什么更有效的方法来确保我不会在这个快速排序函数中陷入无限循环?(C++)
- 快速排序应用于指向对象的指针向量-无限循环
- c++递归快速排序无限循环
- 快速排序中的无限循环
- 快速排序无限循环数值配方