先贴代码
public class Mergers {
private static int[] m_array = null;
public static void sort (int[] array) {
m_array = new int[array.length];
sort (array, 0, array.length-1);
}
private static void sort (int[] array, int start, int end) {
if (start >= end) return;
int mid = start + (end-start) / 2;
sort (array, start, mid);// 注意的地方,若此处为mid-1,两个元素的话会产生递归
sort (array, mid+1, end);// 注意的地方,若此处为mid,两个元素会产生递归
merge (array, start, mid, end);
}
private static void merge (int[] array, int start, int mid, int end) {
int l = start, r = mid+1, index = start;
for (int i=start; i<=end; i++)
m_array[i] = array[i];
while (l <= mid || r <= end) {
if (l > mid) array[index++] = m_array[r++];
else if (r > end) array[index++] = m_array[l++];
else if (m_array[l] < m_array[r]) array[index++] = m_array[l++];
else array[index++] = m_array[r++];
}
}
}