Каков самый быстрый способ объединить 2 набора отсортированных значений? Здесь важна скорость (большой O); не ясность - предположим, что это делается миллионы раз.
Предположим, вы не знаете тип или диапазон значений, но имеете эффективный IComparer
и / или IEqualityComparer < T>
.
Учитывая следующий набор чисел:
var la = new int[] { 1, 2, 4, 5, 9 };
var ra = new int[] { 3, 4, 5, 6, 6, 7, 8 };
Я ожидаю 1, 2, 3, 4, 5, 6, 7, 8, 9. Следующая заглушка может быть использована для проверки кода :
static void Main(string[] args)
{
var la = new int[] { 1, 2, 4, 5, 9 };
var ra = new int[] { 3, 4, 5, 6, 6, 7, 8 };
foreach (var item in UnionSorted(la, ra, Int32Comparer.Default))
{
Console.Write("{0}, ", item);
}
Console.ReadLine();
}
class Int32Comparer : IComparer<Int32>
{
public static readonly Int32Comparer Default = new Int32Comparer();
public int Compare(int x, int y)
{
if (x < y)
return -1;
else if (x > y)
return 1;
else
return 0;
}
}
static IEnumerable<T> UnionSorted<T>(IEnumerable<T> sortedLeft, IEnumerable<T> sortedRight, IComparer<T> comparer)
{
}