-3
void bubbleSort(int ar1[10], int logicalSize)
{
   int tempHolder = 0; 
   for (int i = logicalSize; i >= 2; i--)
   {
      for(int i2 = 0; i2 < logicalSize-i2; i++)
      {
         if (ar1[i2 + 1] < ar1[i2])
         {
            tempHolder = ar1[i2]; 
            ar1[i2] = ar1[i2 + 1]; 
            ar1[i2 + 1] = tempHolder; 
         }

      }
   }
   cout << "The array in sorted order: " << endl; 
   for(int i2 = 0; i2 <= 10; i2++)
   {
      cout << ar1[i2] << endl;
   }
} 

int main () 
{
   int arry1[10]; 
   arry1[0] = 8;
   arry1[1] = 56;
   arry1[2] = 4;
   arry1[3] = 25;
   arry1[4] = 45;
   arry1[5] = 92;
   arry1[6] = 11;
   arry1[7] = 1;
   arry1[8] = 78;
   arry1[9] = 66;
   arry1[10] = 24;

   cout << "The array in its original order: " << endl; 
   for (int i = 0; i <= 10; i++)
   {
      cout << arry1[i] << endl;
   }

   bubbleSort(arry1, 11);

   cout << "The array in sorted order: " << endl; 
   for(int i2 = 0; i2 <= 10; i2++)
   {
      cout << arry1[i2] << endl;
   }


   return 0;
} 

バブルソートが機能しないようです。コードは正常に見え、アレイは適切にセットアップされているようです。誰でもこれを機能させるのを手伝ってもらえますか? mt 関数のループが正しく設定されていませんか? それとも、エラーが発生する原因となっているループ内で何が起こっているのでしょうか?

4

2 に答える 2

1
  1. バッファ オーバーフローが発生しました (10 ではなく 11 要素)
  2. for(int i2 = 0; i2 < logicalSize-i2; i++)次のように、 でi2 をインクリメントする必要があります。for(int i2 = 0; i2 < logicalSize-i2; i2++)
  3. まで繰り返す必要があり< 10ます<= 10
  4. bubbleSort(arry1, 11)する必要がありますbubbleSort(arry1, 10)
  5. ループを次のようにしたい場合がありますfor(バブルソートの貧弱なバージョン):

     for (int i = 0; i < logicalSize; i++)
     {
         for(int i2 = 0; i2 < logicalSize; i2++)
         {
         }
     }
    
于 2013-07-29T20:20:09.190 に答える
0

10 メンバーの配列を宣言するので、インデックス 0 から 9 を持っているためarry1[10]=24;、配列がオーバーフローします。関数に論理的な誤りがあり bubbleSort 、ループが無限になりました。

#include <iostream>

using namespace std;

void bubbleSort(int ar1[], int logicalSize)
{
   int tempHolder = 0;    //logical mistake , which makes your loop infinite
   for (int i = 0; i < logicalSize; i++)
   {
      for(int i2 = 0; i2 < logicalSize-1; i2++)
      {
         if (ar1[i2 + 1] < ar1[i2])
         {
            tempHolder = ar1[i2];
            ar1[i2] = ar1[i2 + 1];
            ar1[i2 + 1] = tempHolder;
         }

      }
   }
   cout << "The array in sorted order: " << endl;
   for(int i2 = 0; i2 < 10; i2++)
   {
      cout << ar1[i2] << endl;
   }
}

int main ()
{
   int arry1[10];
   arry1[0] = 8;
   arry1[1] = 56;
   arry1[2] = 4;
   arry1[3] = 25;
   arry1[4] = 45;
   arry1[5] = 92;
   arry1[6] = 11;
   arry1[7] = 1;
   arry1[8] = 78;
   arry1[9] = 66;
  // arry1[10] = 24;  //array overflow

   cout << "The array in its original order: " << endl;
   for (int i = 0; i < 10; i++)
   {
      cout << arry1[i] << endl;
   }

   bubbleSort(arry1, 10);

   cout << "The array in sorted order: " << endl;
   for(int i2 = 0; i2 < 10; i2++)
   {
      cout << arry1[i2] << endl;
   }


   return 0;
}
于 2013-07-29T20:47:46.840 に答える