归并排序思路
- 对于任意两个有序数组 例如:[2]和[1]
- 可以按顺序把这两个数组合并为一个数组 ([1,2])
- 把要排序的数组分为两个部分,递归地对数组实现上述过程
public class MergeArray {
//总调用接口
private static void mergeSort(int[] a, int n) {
int[] temp = new int[n];
mSort(a,temp,0,n-1);
}
//递归体
private static void mSort(int[] a, int[] temp, int l, int r) {
int mid = (l+r)/2;
if(l<r) {
mSort(a,temp,l,mid);
mSort(a,temp,mid+1,r);
merge(a, temp, l, mid+1, r);
}
}
//合并
private static void merge(int[] a, int[] tempA, int l, int r, int rightEnd) {
int leftEnd = r-1;
int tempIndex = l;
int length = rightEnd-l+1;
while(l<=leftEnd&&r<=rightEnd) {
if(a[l]<=a[r]) {
tempA[tempIndex++] = a[l++];
}else {
tempA[tempIndex++] = a[r++];
}
}
while(l<=leftEnd) {
tempA[tempIndex++] = a[l++];
}
while(r<=rightEnd) {
tempA[tempIndex++] = a[r++];
}
for(int i = 0;i<length;i++,rightEnd--) {
a[rightEnd] = tempA[rightEnd];
}
}
public static void main(String[] args) {
int a[] = new int[] {1,2,6,2,4,4,2,0,1,8,7};
int temp[] = new int[a.length];
mergeSort(a,a.length);
System.out.println(Arrays.toString(a));
}
}