2009-10-15 1 views
0

Existe-t-il un moyen d'obtenir des résultats cohérents à partir de la comparaison lorsque certains des éléments de tri sont identiques? Dois-je juste coder ma propre routine de tri?Comparaison Les résultats des flip flops délégués sur des clés identiques

public class Sorter 
{ 
    public void SortIt() 
    { 
     var myData = new List<SortData>(3); 
     myData.Add(new SortData { SortBy = 1, Data = "D1"}); 
     myData.Add(new SortData { SortBy = 1, Data = "D2" }); 
     myData.Add(new SortData { SortBy = 2, Data = "D3" }); 

     myData.Sort(new Comparison<SortData>((a, b) => a.SortBy.CompareTo(b.SortBy))); 
     ShowResults(myData); 
     myData.Sort(new Comparison<SortData>((a, b) => a.SortBy.CompareTo(b.SortBy))); 
     ShowResults(myData); 
     myData.Sort(new Comparison<SortData>((a, b) => a.SortBy.CompareTo(b.SortBy))); 
     ShowResults(myData); 
    } 

    private void ShowResults(IEnumerable<SortData> myData) 
    { 
     foreach (var data in myData) 
     { 
      Console.WriteLine(data.SortBy + " " + data.Data); 
     } 
     Console.WriteLine("\n"); 
    } 
} 

public class SortData 
{ 
    public int SortBy { get; set; } 
    public string Data { get; set; } 
} 
enter code here 

Maintenant, remarquez que les résultats sont les suivants:

1 D2
1 D1
2 D3

1 D1
1 D2
2 D3

1 D2
1 D1
2 D3

Je ne se soucient pas vraiment comment les deux premiers éléments sont classés aussi longtemps qu'il est cohérent et ce n'est pas! Il garde flip flopping.

Répondre

2

Fondamentalement oui: http://msdn.microsoft.com/en-us/library/w56d4y5z.aspx

Cette méthode utilise .. :: tableau Trier, qui utilise l'algorithme QuickSort.. Cette implémentation exécute un tri instable; c'est-à-dire que si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable préserve l'ordre des éléments qui sont égaux.

Si vous voulez avoir un tri stable, cherchez ailleurs ou lancez le vôtre.

Questions connexes