当我运行这个程序时,我可以在输入数字时到达舞台,但代码在此之后停止工作。
光标闪烁,但我无法做任何事情,也无法输入任何其他内容。 如果代码中有错误,指出它或者是否存在一般错误,请赐教。
#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);
}
}
答案 0 :(得分:3)
为什么要比较排序例程中的索引?你不应该在指数中比较值吗?
你认为这应该做什么?
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
? vars的单字母名称只有 ,如果它们不言自明,或用注释解释。