0

今日予定されている期末試験に向けて勉強しています。私の質問は、do-while(swap) ステートメントはここで何をするのですか? スワップはデフォルトで「true」に設定されていますか?

このコードについての私の理解では、並べ替えのパスごとに少なくとも 1 回反復します。内側の for ループは重要なコードを運び、パス内のすべてのスワップを行います。たとえば、array[count] は temp にコピーされ、array[count+1] は array[count] にコピーされ、array[count] は array[count+1] にコピーされます。2 つの要素が交換されると、bool swap が true に設定されます。外側のループは、swap フラグが false になるまで繰り返します。

void sortArray(int array[], int size)
{
   int size;
   bool swap;

do
{
   swap = false;
   for(int count = 0; count < (size -1); count++)
   {
      if(array[count] > array[count+1])
      {
         temp = array[count];
         array[count] = array[count+1];
         array[count+1] = temp;
         swap = true;
       }
    }
  }while(swap);
 }
4

3 に答える 3

2

Swapアルゴリズムがまだソートされているかどうかを確認するために使用されます。が false の場合swap、配列は既にソートされており、アルゴリズムを終了できることを意味します。

デフォルトでは (do-whileループの各反復の開始時)swapは false に設定されtrue、スワップが行われた場合にのみ に変更されます (配列要素が正しい順序でなかったことを意味します)。

于 2013-07-25T20:22:21.260 に答える
1

Swap変数は、アルゴリズムの終了を決定するために使用されます。配列がソートされている場合、スワップは発生せず、swap変数は false になるため、ソートは終了します。

変数のデフォルト値swapは未定義ですが、最初から配列を処理する前に各反復で false として割り当てるため、問題ではありません

于 2013-07-25T20:23:41.333 に答える
0

while-do は、配列内の要素が交換されなくなるまで for ループを実行するために使用されます。for ループ中にスワップが発生しなかった場合は、すべての要素が並べ替えられます。ただし、内側のループの実行中に 2 つの要素が交換された場合は、結果の配列が並べ替えられているかどうかを確認するために、配列が再度スキャンされます。

于 2013-07-25T20:24:03.383 に答える