3

この質問は、私が割り当てのために書いているコードに関するものなので、はい、バブルソートを使用する必要があり、はい、配列を使用する必要があります。

さて、私は1次元配列を細かいバブルソートを行っていますが、2つをソートしようとすると悲しみが生じます。

私がやろうとしているのは、名前のリスト(Joe、Bob、Betty、Jakeなど)をアルファベット順に並べ替えることです。次のコードを使用して、プログラムは物事をソートしようとします(名前は移動します)が、通常は部分的にしか正しくありません。

#include <iostream>
#include <fstream>
using namespace std;
void AlphaSort(char [][50]);
void GetInput(char [][50]);
void PrintArray(char [][50]);

int main()
{
    char name[4][50];
    cout << "Please enter 4 names:\n";
    GetInput(name);
    cout << endl << "The following names were received:\n";
    PrintArray(name);
    cout << endl << "The names will now be sorted.\n\n"
        << "Calling Sort Function....\n";
    AlphaSort(name);
    cout << endl << "The sorted name order is now:\n";
    PrintArray(name);

    return 0;
}

void GetInput(char name[][50])
{
    int i;

    for(i=0; i<4; i++)
        cin.getline(name[i], 50);
}

void PrintArray(char name[][50])
{
    int i;

    for(i=0; i<4; i++)
        cout << name[i] << endl;
}

void AlphaSort(char name[][50]) //I'm pretty sure the problem is in here.
{
    int Nnames = 4, pass, column, row, letter, sorted;
    char temp[50];

    cout << "Sorting Function Successfully Called...\n"
        << endl << "Names recieved by sort function:\n";

    PrintArray(name);

    //Specifically in this attempt at a bubble sort.
    for(pass=0; pass<(Nnames-1); pass++)
    {
        for(row=0; row<(Nnames-pass-1); row++)
        {
            for(column=0, sorted=0; sorted==0; column++)
            {
                if(name[row][column]>name[row+1][column])
                {
                    for(letter=0; letter<50; letter++)
                        temp[letter] = name[row][letter];
                    for(letter=0; letter<50; letter++)
                        name[row][letter]= name[row+1][letter];
                    for(letter=0; letter<50; letter++)
                        name[row+1][letter] = temp[letter];
                    sorted = 1;
                }
                else if (name[row][column] == name[row+1][column]);
            }
        }
    }    

    cout << endl << "Name order post sort:\n";

    PrintArray(name);
}

現在、これを実行すると、通常は次のようになります。

4つの名前を入力してください:Hammy Harry Ashe Aaron

次の名前が届きました:ハミーハリーアッシュアーロン

名前が並べ替えられます。

ソート関数を呼び出しています....ソート関数が正常に呼び出されました...

ソート機能で受け取った名前:Hammy Harry Ashe Aaron

名前順投稿ソート:Aaron Ashe Harry Hammy

ソートされた名前の順序は次のようになります:Aaron Ashe Harry Hammy

私は同じような問題を見回してきましたが、なぜそれがばかげているのか理解できません。

4

1 に答える 1

0

私の問題は、ifステートメントがすでに正しい順序である可能性に対処していなかったため、後で切り替えたい文字が見つかるまでループしていたようです。固定コードは次のようになります。

void AlphaSort(char name[][50])
{
     int Nnames = 4, pass, column, row, letter, sorted;
     char temp[50];

     cout << "Sorting Function Successfully Called...\n"
          << endl << "Names recieved by sort function:\n";

     PrintArray(name);

     for(pass=0; pass<(Nnames-1); pass++)
     {
                 for(row=0; row<(Nnames-pass-1); row++)
                 {
                            for(column=0, sorted=0; sorted==0; column++)
                            {
                                          if(name[row][column]>name[row+1][column])
                                          {
                                                                     for(letter=0; letter<50; letter++)
                                                                              temp[letter] = name[row][letter];
                                                                     for(letter=0; letter<50; letter++)
                                                                              name[row][letter]= name[row+1][letter];
                                                                     for(letter=0; letter<50; letter++)
                                                                              name[row+1][letter] = temp[letter];
                                                                     sorted = 1;
                                          }
                                          else if (name[row][column]<name[row+1][column])//This is the fix.
                                               sorted = 1;
                            }
                 }
     }    

     cout << endl << "Name order post sort:\n";

     PrintArray(name);
}
于 2012-11-15T04:48:17.857 に答える