C # самое быстрое объединение двух наборов отсортированных значений

Каков самый быстрый способ объединить 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)
{
}
7
задан Cœur 14 July 2018 в 06:59
поделиться