以按降序排列数组最快的方法 [英] Fastest way to sort an array in descending order

查看:255
本文介绍了以按降序排列数组最快的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么下面的代码

Array.Sort(values);
Array.Reverse(values);



在比较

much faster at sorting an array in descending order compared to

Array.Sort(values, (a,b)=>(-a.CompareTo(b)));

代码是在释放模式的调试器之外运行。

Code was run in Release mode outside of the debugger.

什么是产生阵列降序排序,最好是在一个单行的最有效方法是什么?

What is the most efficient way to produce a descending sort for arrays, preferably in a one liner?

推荐答案

这是一个很大的问题。我敢打赌,你的价值观数组是基本类型的数组!

That's a great question. I bet your values array is an array of primitive type!

这真的是那种为主导在这里,因为反向的复杂度为O(n),而排序。是O(n LOGN)

It's really the sort that is dominant here, because the complexity of Reverse is O(n), while the sort is O(n logn).

的事情是,排序基本类型时,.NET实际调用本机的功能,这是非常快 - 更快,使用一个比较。或比较

The thing is that when sorting primitive types, .NET actually calls a native function, which is extremely fast - much faster that using a Comparison or Comparator.

该功能称为 TrySZSort

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
private static bool TrySZSort(Array keys, Array items, int left, int right);

和这里是它如何调用Array类:

and here is how it's called in the Array class:

[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[SecuritySafeCritical]
public static void Sort<T>(T[] array, int index, int length, IComparer<T> comparer)
{
  if (array == null)
    throw new ArgumentNullException("array");
  else if (index < 0 || length < 0)
    throw new ArgumentOutOfRangeException(length < 0 ? "length" : "index", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
  else if (array.Length - index < length)
    throw new ArgumentException(Environment.GetResourceString("Argument_InvalidOffLen"));
  else if (length > 1 && (comparer != null && comparer != Comparer<T>.Default || !Array.TrySZSort((Array) array, (Array) null, index, index + length - 1)))
    ArraySortHelper<T>.Default.Sort(array, index, length, comparer);
}

这篇关于以按降序排列数组最快的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆