4 个解决方案
#1
默认是升序。
#2
默认是快速排序,我说的是linq to objects。
#3
https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,cb26c46274356e0d
贴出部分源代码片断
看到 QuickSort( 了么
以后这种问题不要问,自己去看源代码。
贴出部分源代码片断
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( 了么
以后这种问题不要问,自己去看源代码。
#4
谢谢大家,已经理解
#1
默认是升序。
#2
默认是快速排序,我说的是linq to objects。
#3
https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,cb26c46274356e0d
贴出部分源代码片断
看到 QuickSort( 了么
以后这种问题不要问,自己去看源代码。
贴出部分源代码片断
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( 了么
以后这种问题不要问,自己去看源代码。
#4
谢谢大家,已经理解