2012-10-27 1 views
-2

J'ai un programme dans lequel je dois changer le tri de sélection en un tri d'insertion dans un programme C++ en utilisant Visual Studio 2010. Le code suivant est ce que j'ai montré le genre de sélection:Utilisation de C++ J'ai besoin de changer un tri de sélection en un tri d'insertion

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 

Je les changements suivants mis en œuvre et le programme fonctionne sans erreur, mais les données ne ressemble pas à elle est triée. Voici le code mis à jour suivant:

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 
      } 
+0

pouvez-vous s'il vous plaît également signaler le problème que vous faites face? – aakash

+0

Je ne sais pas exactement comment je devrais écrire le code pour changer ce genre. Ce programme fonctionne parfaitement comme avec le tri par sélection; mais j'ai besoin d'essayer de changer le genre en une sorte d'insertion. – Rocky

+0

Y at-il une raison pour laquelle vous continuez à déduire des points de moi ????? Je pose une question pour de l'aide et de la guidence et je continue d'obtenir des points déduits ???? Qu'est-ce que je fais mal ici? – Rocky

Répondre

1

La pièce suivante de code doit être modifié:

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"; 
} 

déclare également un privé: System::Void insertionSort(int array[], int n,int ascending) comme System::Void selectionSort(int array[], int n,int ascending) et remplir votre code de tri d'insertion là.

+1

Merci pour votre contribution précieuse. J'ai déjà fait les changements dans les domaines que vous avez abordés ici et cette information est mise à jour dans le post ci-dessus. Encore merci d'avoir répondu à mon message original. – Rocky