Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 快速排序中的无限循环?_C++ - Fatal编程技术网

C++ 快速排序中的无限循环?

C++ 快速排序中的无限循环?,c++,C++,当我运行这个程序时,我可以到达输入数字的阶段,但代码在此之后就停止工作了 光标闪烁,但我不能做任何事情,也不能输入任何其他内容。 如果代码中有错误,请指出,或者如果有一般错误,请告诉我 #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 e

当我运行这个程序时,我可以到达输入数字的阶段,但代码在此之后就停止工作了

光标闪烁,但我不能做任何事情,也不能输入任何其他内容。 如果代码中有错误,请指出,或者如果有一般错误,请告诉我

#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);
    }               
}                  
#包括
使用名称空间std;
无效排序(int*a、int o、int p、int r);
int main()
{
int a[10],i,o=5,p=0,r=9;

你为什么要在排序例程中比较索引?你不应该在索引中比较值吗

你认为这应该做什么

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
void排序(int*a、int o、int p、int r)
{//o=5,p=0,r=9时调用
int ii=0,kj=10,uu,uv,tmp;

如果(p为什么要在排序例程中比较索引?不应该在索引处比较值吗

你认为这应该做什么

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
void排序(int*a、int o、int p、int r)
{//o=5,p=0,r=9时调用
int ii=0,kj=10,uu,uv,tmp;


如果(你的调试器说什么?它在哪个区域循环?顺便说一句,Fortran风格的变量早就被弃用了…Fortran风格的变量?请详细说明?对于循环中非常简单的索引计数器之外的任何东西,单字母或双字母变量都是一种糟糕的编码方式。乍一看,我不知道ii、kj、uu或uv代表.a、I、o、p、r also伤了我的头。在Fortran77中,变量名决定了变量类型,但现在不是了。还有,当你有机会的时候,用谷歌搜索“神奇数字”,也不要这样做。@MichaelDorgan是一个Haskeller(越来越多)我更喜欢一个字母的名称,只要它们是不言而喻的,或者用注释来解释。一个字母的名称使代码更容易阅读,IMHO。我可以在非常明显的情况下使用一个字母变量,例如for循环I、j组合,或者甚至在三维空间操作中使用x、y、z,但我必须不同意单字母变量甚至注释在第一次创建时,更容易阅读。一旦创建了任意长度的函数,这些注释会很快超出心智范围-如果您要花时间注释变量名,为什么不使用不需要注释的变量名呢?调试器会说什么?它在哪个区域循环?顺便说一句,Fortran样式的变量很长nce已弃用…Fortran样式的变量?请详细说明?对于循环中非常简单的索引计数器之外的任何东西,单字母或双字母变量都是一种糟糕的编码方式。乍一看,我不知道ii、kj、uu或uv代表什么。a、I、o、p、r也伤了我的头。在Fortran 77中,变量名决定了变量类型,但不再是了。还有,当你有机会的时候用谷歌搜索“神奇数字”,但也不要这样做。@MichaelDorgan是哈斯凯勒(越来越多)我更喜欢一个字母的名称,只要它们是不言而喻的,或者用注释来解释。一个字母的名称使代码更容易阅读,IMHO。我可以在非常明显的情况下使用一个字母变量,例如for循环I、j组合,或者甚至在三维空间操作中使用x、y、z,但我必须不同意单字母变量甚至注释在第一次创建时,更容易阅读。一旦创建了任意长度的函数,这些注释会很快超出心智范围-如果你要花时间注释变量名,为什么不使用不需要注释的变量名呢?我的意思是,如果我写[ii]如果输入10个20..29的值,然后用硬编码的5作为支点调用排序,它会工作吗?我想,不太可能。@MichaelOrganger它真的没那么糟糕。@user2133056啊,好的。你是对的,这也会被更改。对不起。:)“USER2133056”这是不好的硬编码你的枢轴的位置像这样。这两个区域应该根据数组中的值在某个地方相遇,然后你在中间把你的支点撬开。从中间读取它是可以的,但是你应该把它换到边界上,然后从那里发展。我的意思是,如果我WRI。te a[ii]如果你输入10个20..29的值,然后调用你的排序,用它的硬编码5作为支点,它会工作吗?我想,不太可能。@MichaelOrganger它真的没那么糟糕。@user2133056啊,好的。你是对的,这也会被更改。对不起。:)我会考虑一下。@user2133056硬编码你的枢轴的位置是没有好处的。这两个区域应该根据数组中的值在某个地方相遇,然后在中间将你的支点撬开。从中间读取它是可以的,但是你应该把它换到边界上,然后从那里前进。