1. public class MergeSort {
    2. public static void main(String[] args) {
    3. // int[] arr={8,2,7,4,5,3,6,1,0};
    4. int []arr = new int[80000000];
    5. for (int i = 0; i < 80000000; i++) {
    6. arr[i] = (int) (Math.random() * 8000000);
    7. }
    8. int[] temp =new int[arr.length];
    9. long start= System.currentTimeMillis();
    10. mergeSort(arr,0,arr.length-1,temp);
    11. long end= System.currentTimeMillis();
    12. System.out.println("time="+(end-start));
    13. // mergeSort(arr,0,arr.length-1,temp);
    14. // System.out.println(Arrays.toString(arr));
    15. }
    16. public static void mergeSort(int[] arr, int left, int right, int[] temp) {
    17. if(left < right) {
    18. int mid = (left + right) / 2;
    19. //递归分解
    20. mergeSort(arr, left, mid, temp);
    21. mergeSort(arr, mid + 1, right, temp);
    22. //递归合并
    23. merge(arr, left, mid, right, temp);
    24. }
    25. }
    26. public static void merge(int[] arr, int left, int mid, int right, int[] temp) {
    27. int i = left;
    28. int j = mid + 1;
    29. int t = 0;
    30. while (i <= mid && j <= right) {
    31. if (arr[i] <= arr[j]) {
    32. temp[t] = arr[i];
    33. t += 1;
    34. i += 1;
    35. } else {
    36. temp[t] = arr[j];
    37. t += 1;
    38. j += 1;
    39. }
    40. }
    41. //剩余的数继续插入到temp中
    42. while (i <= mid) {
    43. temp[t] = arr[i];
    44. t += 1;
    45. i += 1;
    46. }
    47. //剩余的数继续插入到temp中
    48. while (j <= right) {
    49. temp[t] = arr[j];
    50. t += 1;
    51. j += 1;
    52. }
    53. //合并
    54. t = 0;
    55. int tempLeft = left;
    56. while (tempLeft <= right) {
    57. arr[tempLeft] = temp[t];
    58. t += 1;
    59. tempLeft += 1;
    60. }
    61. }
    62. }