package com.kali.logN;
import java.util.Arrays;
/**
* 归并排序
* 左侧排好序,右侧排好序--->merge,递归实现
*/
public class MergeSort {
public static void main(String[] args) {
int[] arr = {23,12,1,4,65,67,4,34,8,99,8,0,7,4,5,343,23,22,11};
process(arr,0,arr.length-1);
//System.out.println(Arrays.toString(arr));
}
public static void process(int[] arr,int L,int R){
if (L == R) {
return;
}
int mid = L + ((R - L) >> 1);
process(arr,L,mid);
process(arr,mid+1,R);
merge(arr,L,mid,R);
}
public static void merge(int[] arr,int L,int mid,int R){
int[] temp = new int[R-L+1];
int left = L;//左指针
int right = mid+1;//右指针
int p = 0;
while(left <= mid && right <= R){
temp[p++] = arr[left] <= arr[right] ? arr[left++] : arr[right++];
/*if(arr[left] <= arr[right]){
temp[p] = arr[left];
left ++;
}else{
temp[p] = arr[right];
right ++;
}
p ++;*/
}
while(left <= mid){
temp[p++] = arr[left++];
}
while(right <= R){
temp[p++] = arr[right++];
}
System.out.println(Arrays.toString(temp));
for(int i = 0;i < temp.length;i++){
arr[L+i] = temp[i];
}
}
}
测试结果: