У меня есть задание, и мне нужен рабочий код. Прежде чем начать, я хочу понять проблему, но я не могу понять, как ее написать.Сортировать по темам
У меня есть массив данных, возьмите это, например
var arr = new byte[] {5,3,1,7,8,5,3,2,6,7,9,3,2,4,2,1}
Мне нужно разделить этот массив пополам, бросить его в пул потоков и сделать это рекурсивно, пока я не имею < = 2 элементов. Если у меня есть 2 элемента, мне нужно проверить, что меньше, и поместить их на левую сторону, а затем вернуть массив.
Что я не понимаю, так я могу объединить массив? я полагаю, чтобы разделить массив, выбросить поток в пул и заблокировать его до готовности? Как получить результаты потока? Я собираюсь предположить, что невозможно объединить массивы без блокировки?
Heres, что я до сих пор.
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;
}
Примечание: Профессор сказал, что мы можем попросить других о помощи. Я думаю, я могу решить это, не спрашивая, но я хочу получить лучший ответ. Threading - моя слабость (я не все остальное, db, binary io, веб-интерфейс, просто никогда сложные потоки)
вы знаете алгоритмы сортировки ли? Какие из них, по вашему мнению, поддаются параллельному исполнению? Вы пробовали веб-поиск? Почему у вас есть код перед алгоритмом? –
@ Дэвид Хефферна. 1) Раньше я был в ГС. 2) Я не знаю/не помню. 3) Да 4) Из я понимаю, что я должен изучать темы, поэтому я должен использовать эти алгоритмы. –
Я думаю, вам нужно научиться делать веб-поиск, прежде чем решать эту проблему. Поиск параллельной сортировки даст вам много информации. –