您的位置:首页 > 编程语言 > C#

C# Stable Sort(稳固排序)

2008-02-22 12:53 441 查看
保证相等元素的原始位置的排序被称为是稳固的。一个非稳固排序(unstable sort)不保证相等的元素在排序之后还会保持原来的顺序。

.NET使用的排序方法是不稳固的。这些排序方法,包括 System.Array.Sort 和 System.Collections.Generic.List<T>.Sort,使用的是快速排序算法,相对来说是非常快的。

然而,总有时候你会需要稳固排序,此时,一个解决方案是必须的。

示例:

用一个例子可以很好的说明稳固排序。考虑下面这个Person类,其中包含Name和Age两个属性,同时它还实现了IComparable接口(其中包含CompareTo方法)。这里的CompareTo方法根据Age来排序。

class Person : IComparable

Person p1 = new Person( "Abby", 38 );

Person p2 = new Person( "Bob", 23 );

Person p3 = new Person( "Charlie", 23 );

Person p4 = new Person( "Danielle", 18 );

List<Person> list = new List<Person>();

list.Add( p1 );

list.Add( p2 );

list.Add( p3 );

list.Add( p4 );

list.Sort();

Console.WriteLine( "Unstable List Sort:" );

foreach (Person p in list)

Unstable List Sort:

Danielle - 18

Charlie - 23

Bob - 23

Abby - 38

稳固的插入排序

有很多可用的稳固排序。插入排序就是其中一个很简单而有效的稳固排序。

public static void InsertionSort<T>( IList<T> list, Comparison<T> comparison )

static public int Compare( Person x, Person y )

Stable Insertion Sort:

Danielle - 18

Bob - 23

Charlie - 23

Abby - 38

两种排序的比较:

当然,快速排序在效率上要由于插入排序。所以,在一般情况下,使用.NET的排序方法就可以了;在确实需要稳固排序的地方再用插入排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: