只要實(shí)現(xiàn)一個(gè)T類(lèi)型兩兩比較的接口,然后調(diào)用ParallelSort 的 Sort 方法就可以了,是不是很簡(jiǎn)單?
下面是 ParallelSort類(lèi)的代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Sort
{
/**/ ///
/// ParallelSort
///
///
public class ParallelSort < T >
{
enum Status
{
Idle = 0 ,
Running = 1 ,
Finish = 2 ,
}
class ParallelEntity
{
public Status Status;
public T[] Array;
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)
{
pe.Status = ParallelSort < T > .Status.Running;
Array.Sort(pe.Array, pe.Comparer);
pe.Status = ParallelSort < T > .Status.Finish;
}
}
public void Sort(T[] array, IComparer < T > comparer)
{
// Calculate process count
int processorCount = Environment.ProcessorCount;
// If array.Length too short, do not use Parallel sort
if (processorCount == 1 || array.Length < processorCount)
{
Array.Sort(array, comparer);
return ;
}
// Split array
ParallelEntity[] partArray = new ParallelEntity[processorCount];
int remain = array.Length;
int partLen = array.Length / processorCount;
2011年上半年軟考報(bào)名時(shí)間及方式匯總軟考軟件設(shè)計(jì)師歷年真題匯總(2007年-2010年)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |