2010-10-17 3 views
1

Je travaille actuellement à faire mon propre tri de bulles génériques qui peut facilement trier Strings, int. Voici mon code pour le tri normal des bulles. Pouvez-vous m'aider à créer une méthode générique?Comment créer une bulle générique Tri en C#

public static void BubbleSorting() 
{ 

     int Swap; 
     for (int outer = Length; outer >= 1; outer--) 
     { 
      for (int inner = 0; inner < outer - 1; inner++) 
      { 
       if (array[inner] > array[inner + 1]) 
       { 
        Swap = array[inner]; 
        array[inner] = array[inner + 1]; 
        array[inner + 1] = Swap; 
       } 

      } 
      Console.WriteLine(); 
      Display(); 
     } 

    } 
+0

'if (array [interne]> array [interne + 1])' est la seule ligne importante. Comment détermineriez-vous si une chaîne est "plus grande que" une autre chaîne? – bzlm

+0

Pro_Zeck: c'est ce travail? –

+0

@Matt Est-ce que le pape merde dans les bois? – bzlm

Répondre

3
public static void BubbleSort<T>(T[] array, IComparer<T> comparer) { 
    if (comparer == null) comparer = Comparer<T>.Default; 
    T Swap; 
    // etc.. 
} 
1

Il suffit d'utiliser IComparable si les éléments du tableau met en œuvre IComparable vous pouvez remplacer

array[inner] > array[inner + 1] 

avec

array[inner].CompareTo(array[inner + 1]) > 0 

fin si avec

public static void BubbleSorting<T>(T[] array) where T : Icomparable 
{ 
    for (int outer = Length; outer >= 1; outer--) 
    { 
     for (int inner = 0; inner < outer - 1; inner++) 
     { 
      if (array[inner].CompareTo(array[inner + 1]) > 0) 
      { 
       T Swap = array[inner]; 
       array[inner] = array[inner + 1]; 
       array[inner + 1] = Swap; 
      } 

     } 
    } 
} 
+0

Est-ce que cela va gérer les NULL correctement? Je vois une exception NullReferenceException dans cette instruction if interne. – siride

+0

non, ce ne sera pas. –

+0

Cela ne fonctionnera pas et même compilera. Vous essayez d'affecter à Swap variable (avec type de int) valeur de tableau générique. –

0
public static void BubbleSort<T>(T[] list) 
    { 
     BubbleSort<T>(list, Comparer<T>.Default); 
    } 

    public static void BubbleSort<T>(T[] list, IComparer<T> comparer) 
    { 
     bool KeepIterating = true; 
     while (KeepIterating) 
     { 
      KeepIterating = false; 
      for (int i = 0; i < list.Length-1; i++) 
      { 
       T x = list[i]; 
       T y = list[i + 1]; 
       if (comparer.Compare(x,y)>0) 
       { 
        list[i] = y; 
        list[i + 1] = x; 
        KeepIterating = true; 

        for (int j = 0; j < list.Length; j++) 
        { 
         Console.WriteLine("{0} {1}",j,list[j]); 
        } 
       }      
      } 
     } 
    } 
+0

Vous devriez éditer votre question au lieu de poster votre solution comme réponse :) – bzlm

Questions connexes