想请教一个关于Linq的问题

q199308040000 2018-03-14 11:53:30
就是请问C# Linq排序默认使用什么算法?谢谢各位大神
...全文
220 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
q199308040000 2018-03-17
  • 打赏
  • 举报
回复
谢谢大家,已经理解
threenewbee 2018-03-15
  • 打赏
  • 举报
回复
默认是快速排序,我说的是linq to objects。
threenewbee 2018-03-15
  • 打赏
  • 举报
回复
https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,cb26c46274356e0d 贴出部分源代码片断
internal abstract class EnumerableSorter<TElement>
    {
        internal abstract void ComputeKeys(TElement[] elements, int count);
 
        internal abstract int CompareKeys(int index1, int index2);
 
        internal int[] Sort(TElement[] elements, int count) {
            ComputeKeys(elements, count);
            int[] map = new int[count];
            for (int i = 0; i < count; i++) map[i] = i;
            QuickSort(map, 0, count - 1);
            return map;
        }
 
        void QuickSort(int[] map, int left, int right) {
            do {
                int i = left;
                int j = right;
                int x = map[i + ((j - i) >> 1)];
                do {
                    while (i < map.Length && CompareKeys(x, map[i]) > 0) i++;
                    while (j >= 0 && CompareKeys(x, map[j]) < 0) j--;
                    if (i > j) break;
                    if (i < j) {
                        int temp = map[i];
                        map[i] = map[j];
                        map[j] = temp;
                    }
                    i++;
                    j--;
                } while (i <= j);
                if (j - left <= right - i) {
                    if (left < j) QuickSort(map, left, j);
                    left = i;
                }
                else {
                    if (i < right) QuickSort(map, i, right);
                    right = j;
                }
            } while (left < right);
        }
    }
看到 QuickSort( 了么 以后这种问题不要问,自己去看源代码。
SoulRed 2018-03-15
  • 打赏
  • 举报
回复
默认是升序。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧