【www.kwkids.com--中级会计职称】
2011年软件设计师辅导:并行排序算法(4)
// Merge sort
MergeSort < T > mergeSort = new MergeSort < T > ();
List < T[] > source = new List < T[] > (processorCount);
foreach (ParallelEntity pe in partArray)
{
source.Add(pe.Array);
}
mergeSort.Sort(array, source, comparer);
}
}
}
多路归并排序类 MergeSort
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Sort
{
/**/ ///
/// MergeSort
///
///
public class MergeSort < T >
{
public void Sort(T[] destArray, List < T[] > source, IComparer < T > comparer)
{
// Merge Sort
int [] mergePoint = new int [source.Count];
for ( int i = 0 ; i < source.Count; i ++ )
{
mergePoint[i] = 0 ;
}
int index = 0 ;
while (index < destArray.Length)
{
int min = - 1 ;
for ( int i = 0 ; i < source.Count; i ++ )
{
if (mergePoint[i] >= source[i].Length)
{
continue ;
}
if (min < 0 )
{
min = i;
}
else
{
if (comparer.Compare(source[i][mergePoint[i]], source[min][mergePoint[min]]) < 0 )
{
min = i;
}
}
}
if (min < 0 )
{
continue ;
}
destArray[index ++ ] = source[min][mergePoint[min]];
mergePoint[min] ++ ;
}
}
}
}