2010-12-14 32 views
1

J'ai besoin d'un moyen facile de trier un tableau en utilisant ShellSort en C#, aidez-moi s'il vous plaîttravail en classe - shellsort en C#?

+0

Voir pour référence: [implémentation java] (http://stackoverflow.com/questions/12767588/time-complexity-for-shell-sort) – nawfal

Répondre

10

Utilisez le tri de shell.

+4

Je viens presque étranglée à mort :) –

+0

gr8 réponse à la question gr8 :) – TalentTuner

+0

DoYourOwnHomework et Arthur étaient tous deux classés 1 lorsque cette question a été posée. Mais DoYourOwnHomework a vraiment accumulé la rep !! –

8

Personne ne va écrire votre code pour vous. Vous êtes là pour apprendre. Je prendrais les étapes suivantes:

  1. Aller à Wikipedia's Shell Sort Page

  2. Trouvez la psuedocode pour l'algorithme. Lisez-le jusqu'à ce que vous compreniez ce qu'il fait.

  3. Placez le code-source sur C#.

  4. Si vous avez un problème lors de la mise en œuvre, n'hésitez pas à revenir et à poser des questions spécifiques.

+4

4. Si vous avez un problème lors de la mise en œuvre, n'hésitez pas à revenir et à poser des questions spécifiques. – Donnie

+0

5. Malheureusement, sachant SO, quelqu'un va écrire le code pour lui ... –

0
public static int[] shellSort(int[] ar) 
    { 
     //this gaps array works but is not unique 
     int[] gaps = new int[] { 1, 4, 10, 23, 57, 132, 301, 701 }; 
     gaps = gaps.Reverse().ToArray(); 

     Func<int, int, bool> potentialSwitch = (ind1, ind2) => 
     { 
      if (ar[ind2] < ar[ind1]) 
      { 
       int temp = ar[ind2]; 
       ar[ind2] = ar[ind1]; 
       ar[ind1] = temp; 
       return true; 
      } 
      return false; 
     }; 

     foreach (int gap in gaps) 
     { 
      if (gap >= ar.Length) 
       continue; 

      for (int i = 0; i + gap < ar.Length; i++) 
      { 
       int j = i; 
       while (potentialSwitch(j, j + gap)) 
       { 
        j -= gap; 
        if (j < 0) 
         break; 
       } 
      } 
     } 

     return ar; 
    }