归并排序是将两个已经排序好的序列合并为一个已排序的序列,其操作步骤如下:
1. 创建一个长度为两个序列长度之和的空间;
2. 使用两个指针分别指向两个序列的起点;
3. 比较两个指针所在位置的值,将较小的值依序放入新分配的空间;
4. 当一个序列遍历完毕,将另一个序列剩下的数据全部依序摆入分配的空间;
代码如下:
private int[] mergeSort(int[] s1, int[] s2){
if(s1 == null && s2 != null){
return s2;
}
if(s1 != null && s2 == null){
return s1;
}
if(s1 == null && s2 == null){
return new int[0];
}
int[] s3 = new int[s1.length + s2.length];
int i=0;
int j=0;
while(i<s1.length && j<s2.length){
if(s1[i] < s2[j]){
s3[s3.length] = s1[i++];
}else if(s1[i] == s2[j]){
s3[s3.length] = s1[i++];
s3[s3.length] = s2[j++];
}else{
s3[s3.length] = s2[j++];
}
}
mergeRest(s1, i, s3);
mergeRest(s2, j, s3);
}
private void mergeRest(int[] s, int index, int[] t){
for(;index < s.length; index++){
t[t.length] = s[index];
}
}