当你只想要最好的时候,高效的排序
本文关键字:高效 排序 当你 只想 | 更新日期: 2023-09-27 18:15:57
我有一个5000项的list
,使用自定义算法进行排序。
排序完成后,我只需要最好的一个,即list[0]
。
所以我需要一个算法,取列表的第一项,与第二项比较,然后将这两项中较好的一项与第三项进行比较,等等。只需对整个列表进行一次循环(o (n))。
对于这种常见的场景,我应该使用c#中的哪种排序方法?
我认为我目前使用的Sort(..)
算法对于这个目的是非常低效的。
您可以使用MoreLINQ's MaxBy()
。
根据你如何定义"best",你指定的选择器参数可能会有所不同。
示例:你有一个字符串列表,"最佳值"是最长的字符串。
string longestString = listOfStrings.MaxBy(x => x.Length);
从链接的实现中可以看到,这是O(n)
。
我发现MoreLinq的MaxBy
与选择,投影,源和键有点太复杂,只是使用我自己的代码作为扩展方法:
public static T GetBest<T>(this List<T> list, IComparer<T> comparer)
{
if (list == null) throw new ArgumentNullException("list");
if (comparer == null) throw new ArgumentNullException("comparer");
if (list.Count > 0)
{
T best = list[0];
for (int i = 1; i < list.Count; i++)
{
if (comparer.Compare(best, list[i]) > 0)
{
best = list[i];
}
}
return best;
}
return default(T);
}