Timsort C# разбивка на подмассивы

Нужно написать тимсорт на c#. Прочитав алгоритм, я начал реализовывать его, но столкнулся с проблемой. Как мне разбить массив на подмассивы?

Кто не знает принцип работы тимсорта: Берётся массив, и идёт проверка на отсортированные части в массиве, и разбиваются на подмассивы.

Пример:
Входной массив: [1, 5, 8, 4, 3, 0, 7, 3, 2]
Получившиеся подмассивы: [1, 5, 8], [4, 3, 0], [7, 3, 2]


Ответы (1 шт):

Автор решения: KuzCode

Я не подскажу вам как реализовать алгоритм, но разбить массив на подмассивы можно с помощью LINQ:

var array = new int[] { 5, 3, 8, 9, 6 ,4};
var subarrays = array
    .Select((s, i) => new { Value = s, Index = i })
    .GroupBy(x => x.Index / 3) // тут 3 - это длинна одного подмассива
    .Select(grp => grp.Select(x => x.Value).ToArray())
    .ToArray();
    
subarrays
    .ToList()
    .ForEach(subarray => Console.WriteLine("[" + string.Join(",", subarray) + "]"));

Вывод:

[5,3,8]
[9,6,4]
→ Ссылка