У меня есть назначение, и мне нужен рабочий код.Перед тем, как начать, я хочу понять проблему, но не могу понять, как ее написать.
У меня есть массив данных, возьмите это, например,
var arr = new byte[] {5,3,1,7,8,5,3,2,6,7,9,3,2,4,2,1}
Мне нужно разделить этомассив пополам, бросить его в пул потоков и делать это рекурсивно, пока у меня не будет <= 2 элементов.Если у меня есть 2 элемента, мне нужно проверить, что меньше, и поместить его в левую часть, а затем вернуть массив. </p>
Что я не понимаю, так это как объединить массив?я должен разделить массив, бросить поток в пул и заблокировать, пока он не будет готов?Как я могу получить результаты потока?Я собираюсь предположить, что невозможно объединить массивы без блокировки?
Вот что у меня есть.
static void Main(string[] args)
{
var arr = new byte[] { 5, 3, 1, 7, 8, 5, 3, 2, 6, 7, 9, 3, 2, 4, 2, 1 };
var newarr = Sort(arr);
Console.Write(BitConverter.ToString(newarr));
}
static byte[] Sort(byte[] arr)
{
if (arr.Length <= 2)
return arr;
if (arr.Length == 2)
{
if (arr[0] > arr[1])
{
var t = arr[0];
arr[0] = arr[1];
arr[1] = t;
}
return arr;
}
var arr1 = arr.Take(arr.Length / 2).ToArray();
var arr2 = arr.Skip(arr1.Count()).ToArray();
//??
return arr;
}
Примечание: Профессор сказал, что мы можем попросить других помочь,Я думаю, что могу решить это, не спрашивая, но я хочу получить лучший ответ.Потоки - моя слабость (я не делаю ничего другого, дБ, двоичный ввод, веб-интерфейс, просто никогда не сложные потоки)