나는 과제가있어서 작업 코드가 필요합니다. 시작하기 전에 문제를 이해하고 싶지만 쓰기 방법을 파악할 수 없습니다.스레드로 정렬
가 I 데이터의 배열을, 예
I가 절반이 배열 분할 스레드 풀로 던져 내가 < = 2 요소를 가질 때까지 재귀 적으로 그렇게 할 필요var arr = new byte[] {5,3,1,7,8,5,3,2,6,7,9,3,2,4,2,1}
이 걸릴. 만약 내가 2 요소를 가지고 내가 덜 확인하고 왼쪽에 넣어 다음 배열을 반환해야합니다.
내가 이해하지 못하는 것은 어떻게 배열을 병합합니까? 내가 배열을 분할하고, 풀에 스레드를 던져서 준비가 될 때까지 차단한다고 가정합니까? 스레드의 결과는 어떻게 얻을 수 있습니까? 차단하지 않고 배열을 병합 할 수 없다고 가정합니다.
내가 지금까지 무엇을 가지고 있는지.
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;
}
참고 : 교수는 다른 사람들에게 도움을 요청할 수 있다고 말했습니다. 나는 묻지 않고이 문제를 해결할 수 있다고 생각하지만 가장 좋은 대답을 원합니다. 스레딩은 내 약점입니다. (db, binary, io, 웹 인터페이스, 복잡한 스레드는 없습니다.)
어떤 정렬 알고리즘을 알고 있습니까? 병렬 실행에 적합한 것은 어느 것입니까? 웹 검색을 해봤습니까? 왜 알고리즘을 사용하기 전에 코드를 가지고 있습니까? –
@ David Hefferna. 1) 저는 HS에있었습니다. 2) 나는 모릅니다/기억하지 않습니다. 3) 예 4) 나는이 알고리즘을 사용할 수 있도록 스레드를 배울 것을 이해합니다. –
이 문제를 해결하기 전에 웹 검색을 수행하는 방법을 배워야한다고 생각합니다. 병렬 정렬을 검색하면 많은 정보를 얻을 수 있습니다. –