Array.Sort方法
该方法采取的排序算法是快速排序算法。有关该算法的一些理论知识,如下
快速排序对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
有关该方法的介绍如下
该方法已经足够快,特别在元素数据量比较大的时候比较明显。
我们知道其实Array是一个非常重要的数据结构,类似ArrayList或者List这种更高级的类型其实都是基于Array来做的。所以,在Array这个基础类型(它是一个抽象类)定义一个好的Sort方法是很重要的。
我们来看一下List的Sort方法,你会发现它调用的就是Array.Sort方法,只不过是一个带泛型的方法而已
同样的代码也可以在ArrayList.Sort中找到
下面来看一个实例
static void Main(string[] args)
{
int[] numbers = new int[10];
Random rnd = new Random();
for (int i = 0; i < 10; i++)
{
numbers[i] = rnd.Next(100);//我们用随机数来增加练习的有趣性
}
Console.WriteLine("初始化:");
Display(numbers);
Console.WriteLine("排序后:");
Array.Sort(numbers);
Display(numbers);
Console.Read();
}
static void Display(int[] numbers)
{
foreach (var item in numbers)
{
Console.Write(item + ",");
}
Console.WriteLine();
}
排序的结果如下
你看到,它很方便地进行了排序。默认情况下是升序的。那么如何让他按照降序排列呢?
我们通常添加一个自定义的比较类型,让这个类型去告诉Array.Sort方法,我们要怎么比较元素
class IntComparer : IComparer<int>
{
#region IComparer<int> 成员
public int Compare(int x, int y)
{
if (_type == "DESC")
return y.CompareTo(x);//我们这里正好让它反过来,就实现了降序了
else
return x.CompareTo(y);
}
#endregion
private string _type = "ASC";
public IntComparer(string type)
{
_type = type;
}
}
然后,在调用代码中
Console.WriteLine("初始化:");
Display(numbers);
Console.WriteLine("排序后:");
Array.Sort(numbers, new IntComparer("DESC"));
最后看到的结果就是
这样的设计很棒,对于我们的自定义类型也是一样的做法。