1. package sort;
    2. import java.util.Arrays;
    3. public class MergeSort {
    4. public static void sort(int[] arr){
    5. int[] temp = new int[arr.length];
    6. sort(arr, 0, arr.length-1, temp);
    7. System.out.println(Arrays.toString(temp));;
    8. }
    9. public static void sort(int[] arr, int left, int right, int[] temp){
    10. if (left < right){
    11. int mid = (left+right)/2;
    12. sort(arr, left, mid, temp);
    13. sort(arr, mid+1, right, temp);
    14. merge(arr, left, mid, right, temp);
    15. }
    16. }
    17. private static void merge(int[] arr, int left, int mid, int right, int[] temp){
    18. int i = left; //左序列指针
    19. int j = mid+1; //右序列指针
    20. int t = 0; //临时数组指针
    21. while (i<=mid && j<=right){
    22. if(arr[i]<=arr[j])
    23. temp[t++] = arr[i++];
    24. else
    25. temp[t++] = arr[j++];
    26. }
    27. while (i<=mid){ //将左边剩余元素填充进temp中
    28. temp[t++] = arr[i++];
    29. }
    30. while (j<=right){ //将右序列剩余元素填充进temp中
    31. temp[t++] = arr[j++];
    32. }
    33. t = 0;
    34. //将temp中的元素全部拷贝到原数组中
    35. while (left <= right){
    36. arr[left++] = temp[t++];
    37. }
    38. }
    39. public static void main(String[] args) {
    40. int []arr = {9,8,7,6,5,4,3,2,1};
    41. sort(arr);
    42. }
    43. }