1 / 24
文档名称:

并行排序算法.docx

格式:docx   大小:12KB   页数:24页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

并行排序算法.docx

上传人:baba 2022/5/12 文件大小:12 KB

下载得到文件列表

并行排序算法.docx

相关文档

文档介绍

文档介绍:细心整理
并行排序算法
先简洁说一下给的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