/// <summary>
/// 归并排序
/// </summary>
/// <param name="Myarray"></param>
/// <returns></returns>
private int[] MergerSotr(int[] Myarray)
{
int len=1;
while (len < Myarray.Length)
{
Merge(Myarray, len);
len *= 2;
}
return Myarray;
}
/// <summary>
/// 归并操作
/// </summary>
/// <param name="Myarray"></param>
/// <param name="len"></param>
private void Merge(int[] Myarray, int len)
{
int m = 0;
int l1 = 0;
int h1, l2, h2;
int j = 0;
int i = 0;
int[] tmp = new int[Myarray.Length];
while (l1 + len < Myarray.Length)
{
l2 = l1 + len;
h1 = l2 - 1;
h2 = (l2 + len - 1) < Myarray.Length ? l2 + len - 1 : Myarray.Length - 1;
j = l2;
i = l1;
//比较两个序列的最小值并赋值给临时表,同时那个拥有最小值得序列番号自加,依次比较直至番号超出,取出最小的几个值。
while ((i <= h1) && (j <= h2))
{
if (Myarray[i] < Myarray[j])
tmp[m++] = Myarray[i++];
else
tmp[m++] = Myarray[j++];
}
//如果没有排序完,继续。
while (i <= h1)
{
tmp[m++] = Myarray[i++];
}
while (j <= h2)
{
tmp[m++] = Myarray[j++];
}
l1 = h2 + 1;
}
i = l1;
while (i < Myarray.Length)
{
tmp[m++] = Myarray[i++];
}
for (i = 0; i < Myarray.Length; i++)
{
Myarray[i] = tmp[i];
}
}