.net泛型,数组,lambda调用性能 定量比较

本文探讨了.NET框架中泛型、数组和Lambda表达式在排序性能上的差异。作者通过编写不同版本的快速排序算法进行测试,发现.NET LINQ的Sort方法性能最优。实验结果显示,使用Lambda表达式会降低性能,而从List转换为数组可以显著提高排序速度。此外,调整函数调用结构也会对性能产生影响。
摘要由CSDN通过智能技术生成

这几天准备.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;
            }
         
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值