前面我写的归并排序实现,虽然原理上没什么问题,但算法实现不是很理想,今天没什么事情,重新优化了一下,这里比较一下:
1) 第1种方式,我采用了辅助存储来进行归并,代码如下:
private void MergeSort1(int[] A, int iS, int iE)
{
if (iS == iE)
{
count++;
return;
}
int iE1 = (iS + iE) / 2;
int iS2 = iE1 + 1;
MergeSort1(A, iS, iE1);
MergeSort1(A, iS2, iE);
//针对两个排好序的段(iS-iE1,iS2-iE)进行整理
int i1 = iS, j1 = iS2;
//这里的归并采用辅助存储空间的方式.
int[] Result = new int[iE - iS + 1];
int b = 0;
while(true)
{
count++;
if (j1 <= iE && i1 <= iE1)
{
if (A[i1] <= A[j1])
{
Result[b] = A[i1];
i1++;
}
else
{