package algorithms;
import java.util.Arrays;
public class 归并排序算法 {
static void merge(int[] a,int left,int mid,int right) {
int m=right-mid;
int n=mid-left+1;
int[] z=new int[n+1];
int[] h=new int[m+1];
for(int i=0;i<n;i++)
{
z[i]=a[left+i];
}
for(int i=0;i<m;i++)
{
h[i]=a[mid+i+1];
}
System.out.println(Arrays.toString(z));
System.out.println(Arrays.toString(h));
z[n]=Integer.MAX_VALUE;
h[m]=Integer.MAX_VALUE;
int j=0,p=0;
for(int k=left;k<=right;k++)
{
if(z[j]==Integer.MAX_VALUE)
{
a[k]=h[p];
p++;
continue;
}
if(h[p]==Integer.MAX_VALUE)
{
a[k]=z[j];
j++;
continue;
}
if(z[j]>=h[p])
{
a[k]=z[j];
j++;
continue;
}
if(z[j]<=h[p])
{
a[k]=h[p];
p++;
continue;
}
}
System.out.println(Arrays.toString(a));
}
static void mergeSort(int[] a,int s,int e) {
if(s<e)
{
int m=(s+e)/2;
mergeSort(a,s,m);
mergeSort(a,m+1,e);
merge(a,s,m,e);
}
}
public static void main(String[] args) {
int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };
mergeSort(a, 0, a.length-1);
System.out.println("排好序的数组:");
for (int e : a)
System.out.print(e+" ");
}
}