用C#写了个归并排序,让大家提点意见,最好是贴上自己的。一起共勉......
public class SortLib
{
public int[] MergeSort(int[] data)
{
if (data.Length < 2)
{
return data;
}
else
{
int mid = data.Length / 2;
int[] left = new int[mid];
int[] right = new int[data.Length - mid];
Array.Copy(data, 0, left, 0, left.Length);
Array.Copy(data, mid, right, 0, right.Length); int[] leftSort = MergeSort(left);
int[] rightSort = MergeSort(right); return Merge(leftSort, rightSort);
}
}
private int[] Merge(int[] leftDate,int[] rightDate)
{
int[] tmp = new int[leftDate.Length + rightDate.Length];
int rightIndex = 0;
int curIndex = 0;
for (int i = 0;i< leftDate.Length;i++)
{
for (int j = rightIndex; j < rightDate.Length; j++)
{
if (leftDate[i] > rightDate[j])
{
tmp[curIndex++] = rightDate[j];
rightIndex++;
}
}
tmp[curIndex++] = leftDate[i];
} if (curIndex < tmp.Length - 1)
{
Array.Copy(rightDate, rightIndex, tmp, curIndex, tmp.Length - curIndex);
} return tmp;
}
}
public class SortLib
{
public int[] MergeSort(int[] data)
{
if (data.Length < 2)
{
return data;
}
else
{
int mid = data.Length / 2;
int[] left = new int[mid];
int[] right = new int[data.Length - mid];
Array.Copy(data, 0, left, 0, left.Length);
Array.Copy(data, mid, right, 0, right.Length); int[] leftSort = MergeSort(left);
int[] rightSort = MergeSort(right); return Merge(leftSort, rightSort);
}
}
private int[] Merge(int[] leftDate,int[] rightDate)
{
int[] tmp = new int[leftDate.Length + rightDate.Length];
int rightIndex = 0;
int curIndex = 0;
for (int i = 0;i< leftDate.Length;i++)
{
for (int j = rightIndex; j < rightDate.Length; j++)
{
if (leftDate[i] > rightDate[j])
{
tmp[curIndex++] = rightDate[j];
rightIndex++;
}
}
tmp[curIndex++] = leftDate[i];
} if (curIndex < tmp.Length - 1)
{
Array.Copy(rightDate, rightIndex, tmp, curIndex, tmp.Length - curIndex);
} return tmp;
}
}
改下
if (curIndex < tmp.Length)