归并排序总体来说比较简单,其适应场所是对已经排序好的几个序列整合成一个总的排序好的序列。根据其特点,对于已经排序好的几个序列,只需依次取其第一个元素比较,较小的放在新序列里。对于一个数组的情况,先将其拆分,再二路归并排序。
具体代码实现如下(以整型数组排序为例):
pubic static viod mergeSort(int a[],int left,int right){
if(left<right){
int mid = (left+right)/2;
mergeSort(a,left,mid-1);
mergeSort(a,mid+!,right);
int b[] = new int[a.length];
meger(a,b,left,mid,right);
}
}
public static void meger(int a[],int b[],int l,int mid,int r){
int i = l;
int j = mid + 1;
int k = l;
while(i<=mid && j<=r){
if(a[i]<a[j]){
b[k++] = a[i++];
}else{
b[k++] = a[j++];
}
}
if(i>mid){
for(int x = j;x<=r;x++){
b[k++] = a[x];
}
}else{
for(int x = i;x<=mid;x++){
b[k++] = a[x];
}
}
}