-2

Visual Studio 2010 を使用して、C++ プログラムで選択ソートを挿入ソートに変更する必要があるプログラムがあります。次のコードは、選択ソートを示したものです。

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
             {
                 int data[] = {5,6,7,1,2,4,7,8,9,11,12,13,0,7,8,5,3,2,6,8};
                 if (button1->Text == "Start") 
                 {
                     panel1->Visible = true;
                     button1->Text = "Sort";
                     messageLabel->Text="Unsorted Array";
                     DrawArray(data, 20);
                 }
                 else
                 {
                     if(ascButton->Checked )
                     {
                         selectionSort(data,20,1);
                         messageLabel->Text="Sorted Array - Ascending";
                     }
                     else
                     {
                         selectionSort(data,20,2);
                         messageLabel->Text="Sorted Array - Descending";
                     }
                     DrawArray(data, 20);
                 }
             }

    private: System::Void selectionSort(int array[], int n,int ascending)
             {
                 int temp,index; // temporary variable used for swapping and index
                 int i, j;
                 for (i = 0; i < n-1; i++)
                 {
                     index = i;
                     for (j = i+1; j < n; j++)
                     {
                        if(ascending==1)
                        {
                            if (array[j] < array[index])
                            {
                                 index = j;
                            }
                        }
                        else
                        {
                            if (array[j] > array[index])
                            {
                                 index = j;
                            }
                        }
                     }
                    if (index != i) 
                    {
                          temp = array[i];
                          array[i] = array[index];
                          array[index] = temp;
                    }
                 } // end for

             } // end method selectionSort

次の変更を実装し、プログラムはエラーなしで実行されますが、データがソートされているようには見えません。次の更新されたコードは次のとおりです。

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
             {
                 int data[] = {5,6,7,1,2,4,7,8,9,11,12,13,0,7,8,5,3,2,6,8};
                 if (button1->Text == "Start") 
                 {
                     panel1->Visible = true;
                     button1->Text = "Sort";
                     messageLabel->Text="Unsorted Array";
                     DrawArray(data, 20);
                 }
                 else
                 {
                     if(ascButton->Checked )
                     {
                        insertionSort(data,20,1);
                         messageLabel->Text="Sorted Array - Ascending";
                     }
                     else
                     {
                         insertionSort(data,20,2);
                         messageLabel->Text="Sorted Array - Descending";
                     }
                     DrawArray(data, 20);
                 }
             }

    private: System::Void insertionSort(int array[], int n,int ascending)
             {
                 int data[]= {5,6,7,1,2,4,7,8,9,11,12,13,0,7,8,5,3,2,6,8};
                 int vacant; // Position of last vacated element
                 int temp; // Temporary copy of unsorted value
                 int i;
                 for (i=0; i < n-1; i++)
                 {
                     temp = data[i+1]; // Copy first unsorted value
                     for (vacant = i+1; 
                         ((vacant > 0) && (data[vacant-1] > temp));
                         vacant--)
                     {
                         data[vacant] = data[vacant-1]; // Shift data up
                     } // End inner loop
                 data[vacant] = temp; // Insert value into vacated element
                 } // End outer loop
             }
4

1 に答える 1

1

次のコードを変更する必要があります。

if(ascButton->Checked )
{
    //selectionSort(data,20,1);
    insertionSort(data, 20, 1);
    messageLabel->Text="Sorted Array - Ascending";
}
else
{
    //selectionSort(data,20,2);
    insertionSort(data, 20, 1);
    messageLabel->Text="Sorted Array - Descending";
}

また、private:System::Void insertionSort(int array[], int n,int ascending)と同様System::Void selectionSort(int array[], int n,int ascending)に宣言し、そこに挿入ソート コードを入力します。

于 2012-10-27T22:25:19.183 に答える