Этот подход разделяет каждое число на группы, а затем выполняет итерации по группам в порядке, условно добавляя их в список результатов. Вероятно, есть способы сделать это более безопасным и эффективным, но это должно дать вам начало. (Это предполагает, что если не равные отсчеты каждого числа в исходном массиве, он будет пропускать эти цифры, как она работает из них на этапе итерации.)
int[] arr = new[] { 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5 };
var orderList = arr.OrderBy(x => x).Distinct().ToArray();
var refList = arr.GroupBy(x => x).ToDictionary(k => k.Key, v => v.Count());
var result = new List<int>();
int i = 0;
while (result.Count < arr.Length)
{
if (refList.Values.Sum() == 0)
break;
if (refList[orderList[i]] > 0)
{
result.Add(orderList[i]);
refList[orderList[i]]--;
}
i++;
if (i >= orderList.Length)
i = 0;
}
// Result: [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]
Нет, нет. Я даже не могу назвать такую сортировку одним или двумя словами. Вы можете реализовать его самостоятельно. –
Это может быть технически возможно с использованием LINQ, но это было бы грязно. Было бы намного проще и эффективнее реализовать его самостоятельно. – Abion47
Не имеет смысла. Что, если это '1,1,2,2,3,3,3,3,4', каков будет выход? Из коробки Linq предоставляет реализации, которые являются обычными, например, порядок или порядок по убыванию. Что это за заказ? Похож на очень конкретный случай – CodingYoshi