0

このプログラムを実行すると、数字を入力する段階まで到達できますが、その後はコードが機能しなくなります。

カーソルが点滅しますが、何もできず、他に何も入力できません。コードに間違いがあれば指摘していただくか、一般的な間違いがあれば教えてください。

#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);
    }               
}                  
4

1 に答える 1

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 を使用しているのですか? なぜあなたはそれを呼ぶopですか?変数の 1 文字の名前は、それらが自明である、コメントで説明されている場合にのみ問題ありません。

于 2013-03-04T19:24:09.867 に答える