合并排序采用的是一种分而治之的解决问题方法,将问题分小处理。
#region 合并排序
public static void MergeSort(double[] arrayList, int start, int end)
{
if(start < end)
{
int middle = (int)((start+end)/2);
MergeSort(arrayList, start, middle);
MergeSort(arrayList, middle+1, end);
Merge(arrayList,start, middle, end);
}

}
private static void Merge(double[] arrayList, int start , int middle, int end)
{
int firstHalf = middle - start + 1;
int secondHalf = end - middle;
double[] first = new double[firstHalf + 1];
double[] second = new double[secondHalf + 1];

for(int m = 0; m < firstHalf; m++)
{
first[m] = arrayList[start+m];
}
for(int m = 0; m < secondHalf; m++)
{
second[m] = arrayList[middle+m+1];
}
first[firstHalf] = double.MaxValue;
second[secondHalf] = double.MaxValue;

int i = 0;
int j = 0;
for(int k=start;k <= end;k++)
{
if(first[i] <= second[j])
{
arrayList[k] = first[i];
i++;
}
else
{
arrayList[k] = second[j];
j++;
}
}

}
#endregion
#region 合并排序
public static void MergeSort(double[] arrayList, int start, int end)
{
if(start < end)
{
int middle = (int)((start+end)/2);
MergeSort(arrayList, start, middle);
MergeSort(arrayList, middle+1, end);
Merge(arrayList,start, middle, end);
}
}
private static void Merge(double[] arrayList, int start , int middle, int end)
{
int firstHalf = middle - start + 1;
int secondHalf = end - middle;
double[] first = new double[firstHalf + 1];
double[] second = new double[secondHalf + 1];
for(int m = 0; m < firstHalf; m++)
{
first[m] = arrayList[start+m];
}
for(int m = 0; m < secondHalf; m++)
{
second[m] = arrayList[middle+m+1];
}
first[firstHalf] = double.MaxValue;
second[secondHalf] = double.MaxValue;
int i = 0;
int j = 0;
for(int k=start;k <= end;k++)
{
if(first[i] <= second[j])
{
arrayList[k] = first[i];
i++;
}
else
{
arrayList[k] = second[j];
j++;
}
}
}
#endregion


浙公网安备 33010602011771号