这几天准备.net的面试 周末手写快速排序练练手,一时兴起想测测自己写的快速排序性能如何,尤其是对比以前写过的快速排序,发现了.net性能上的一点儿有趣的事情
首先是一段高扩展性的快速排序,支持泛型,同时还使用lambda表达式使得该快速排序可以支持任何类型的排序,只要提供了排序方法即可,代码如下
public static void Sort<T>(List<T> arrayForSort, int startIndex, int endIndex, Func<T, T, bool> CompareMethod)
{
if (startIndex >= endIndex)
{
return;
}
int pointer = startIndex;
int end = endIndex;
for (int i = pointer + 1; i <= end; i++)
{
if (CompareMethod(arrayForSort[pointer], arrayForSort[i]))//把比当前锚点数小的数全部移到锚点数左边
{
var temp = arrayForSort[pointer];
arrayForSort[pointer] = arrayForSort[i];
arrayForSort[i] = temp;
pointer = i;
}
else//若当前比较的数比锚点数大 则将其与最后面的数对调
{
var temp = arrayForSort[end];
arrayForSort[end] = arrayForSort[i];
arrayForSort[i] = temp;
--i;
--end;
}
}
Sort<T>(arrayForSort, startIndex, pointer, CompareMethod);
Sort<T>(arrayForSort, pointer+1, endIndex, CompareMethod);
}
然后同样的排序方法,写法也一样,但是去掉了方便扩展的泛型支持以及lambda,这样代码就只能对list<int>排序了代码如下(其实就是把参数改了下,删除了最后的CompareMethod参数)
public static void Sort(List<int> arrayForSort, int startIndex, int endIndex)
{
if (startIndex >= endIndex)
{
return;
}