C# Stable Sort(稳固排序)

保证相等元素的原始位置的排序被称为是稳固的。一个非稳固排序(unstable sort)不保证相等的元素在排序之后还会保持原来的顺序。

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

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

示例:

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

class Person : IComparable
{
  public Person( string name, int age )
  {
    this.Name = name;
    this.Age = age;
  }
  public string Name;
  public int Age;
  public int CompareTo( object obj )
  {
    int result = 1;
    if (obj != null && obj is Person)
    {
      Person person = (Person)obj;
      result = this.Age.CompareTo( person.Age );
    }
    return result;
  }
  public override string ToString()
  {
    return String.Format( "{0} - {1}", this.Name, this.Age );
  }
}

现在,让我们创建、排序和写一个Person类的集合。

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)
{
  Console.WriteLine( p );
}

时间: 2024-10-30 23:37:12

C# Stable Sort(稳固排序)的相关文章

[开发故事]第三回,实现集合类Sort自定义排序

对集合元素进行排序是经常发生的事情,事实上大部分的集合类型都默认实现 了Sort方法,进行其元素的排序操作.例如List<T>集合的Sort方法有: public void Sort(); public void Sort(Comparison<T> comparison); public void Sort(IComparer<T> comparer); public void Sort(int index,int count,IComparer<T> c

简单的!! dataview.sort 不排序

问题描述 //dt是一个DataTableSurName是它的一个字段DataViewdv=dt.DefaultView;dv.Sort="SurName";发现dv根本没排序,为什么啊,很简单的一个函数啊.换其它字段排序也不行 解决方案 解决方案二:你的用法没问题.解决方案三:dv.Sort="SurName";改为dv.Sort="SurNamedesc";试试看解决方案四:已经改成dv.Sort="SurNamedesc"

JavaScript Sort 表格排序_javascript技巧

1.你真的懂JavaScript里面的Sort方法吗? 2.你知道JavaScript中 localeCompare 方法的函数体吗? 3.表格排序 方法 要哪些参数? JavaScript中的sort方法直接就提供了排序的功能,不需要我们自己写个循环一个个的判断.但其机制仍然是那样的, 复制代码 代码如下: window.onload=function(){ var MyArr=new Array("red","green","gray");

Swift实现Selection Sort选择排序算法的实例讲解_Swift

选择排序Selection Sort是一种和插入排序Insertion Sort类似的排序方法,它同样只适用于对规模不大的集合进行排序.它的核心思想是,在序列内部,把序列逻辑上分成已排序和未排序两部分,不断找到未排序部分中最符合排序规则的元素,添加进已排序部分,直到序列中所有元素都已经添加到了已排序部分,此时,整个序列就排序完成了. 冒泡排序是两两比较不断交换来实现排序,所以比较繁琐. 而选择排序  则是先选择要交换的那个数,才去交换.这样就可以省去很多不必要的步骤. Swift版实现示例: f

详解Bucket Sort桶排序算法及C++代码实现示例_C 语言

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序).桶排序是鸽巢排序的一种归纳结果.当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n)).但桶排序并不是比较排序,他不受到O(n log n)下限的影响. 桶排序以下列程序进行: 1.设置一个定量的数组当作空桶子. 2.寻访序列,并且把项目一个一个放到对应的桶子去. 3.对每个不是空的桶子进行排

详细解说 STL 排序(Sort)

排序 一切复杂的排序操作,都可以通过STL方便实现 ! 0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性.不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的b

JavaScript中用sort()方法对数组元素进行排序的操作

  这篇文章主要介绍了JavaScript中用sort()方法对数组元素进行排序的操作,是JS入门学习中的基础知识,需要的朋友可以参考下 JavaScript数组sort()方法排序数组的元素. 语法 ? 1 array.sort( compareFunction ); 下面是参数的详细信息: compareFunction : 指定一个函数,定义排序次序.如果省略,数组字典顺序排序. 返回值: 返回一个排序的数组 例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <

在Python中使用sort()方法进行排序的简单教程

  这篇文章主要介绍了在Python中使用sort()方法进行排序的简单教程,是Python学习中的基础知识,需要的朋友可以参考下 sort()方法排序列表中的对象,比较使用func(如果给定). 语法 以下是sort()方法的语法: ? 1 list.sort([func]) 参数 func -- 这是一个可选参数,如果有将使用该函数,对列表中的对象进行排序 返回值 此方法不返回任何值,但是从列表中给定的对象进行排序 例子 下面的例子显示了sort()方法的使用 ? 1 2 3 4 5 6 #

Lucene5学习之排序-Sort

  这回我们来学习Lucene的排序.机智的少年应该已经发现了,IndexSearcher类的search方法有好几个重载:        Java代码   /** Finds the top <code>n</code>     * hits for <code>query</code>.     *     * @throws BooleanQuery.TooManyClauses If a query would exceed      *