文档介绍:细心整理
并行排序算法
先简洁说一下给的A,B,C 三种算法(见上面引用的那篇博客),A算法将耗时的平方和开平方计算放到比拟函数中, 时,每次亮亮比拟都要执行平方和开平方计算,其平均算法困难度为 O(nlog public IComparer < T > Comparer;
public ParallelEntity(Status status, T[] array, IComparer < T > comparer)
{
Status = status;
细心整理
Array = array;
Comparer = comparer;
}
}
private void ThreadProc(Object stateInfo)
{
ParallelEntity pe = stateInfo as ParallelEntity;
lock (pe)
{
= ParallelSort < T > .;
(, );
= ParallelSort < T > .;
}
}
public void Sort(T[] array, IComparer < T > comparer)
细心整理
{
// Calculate process count
int processorCount = ;
// If too short, do not use Parallel sort
if (processorCount == 1 || < processorCount)
{
(array, comparer);
return ;
}
// Split array
ParallelEntity[] partArray = new ParallelEntity[processorCount];
int remain = ;
int partLen = / processorCount;
// Copy data to splited array
for ( int i = 0 ; i < processorCount; i ++ )
细心整理
{
if (i == processorCount - 1 )
{
partArray[i] = new ParallelEntity(, new T[remain], comparer);
}
else
{
partArray[i] = new ParallelEntity(, new T[partLen], comparer);
remain -= partLen;
}
(array, i * partLen, partArray[i].Array, 0 , partArray[i].);
}
// Parallel sort
细心整理
for ( int i = 0 ; i < processorCount - 1 ; i ++ )
{
( new WaitCallback(ThreadProc), partArray[i]);
}
ThreadProc(partArray[processorCount - 1 ]);
// Wait all threads finish
for ( int i = 0 ; i < processorCount; i ++ )
{
while ( true )
{
lock (partArray[i])
{
if (partArray[i].Status == ParallelSort < T > .)
{
细心整理
break ;
}
}
( 0 );
}
}
// Merge sort
MergeSort < T > me