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]