1. package org.example.algorithm;
    2. import java.util.Arrays;
    3. public class mergeSort {
    4. // 归并
    5. public static void merge(int[] a, int low, int mid,int high){
    6. int[] tmp = new int[high - low + 1]; //创建临时数组存储排序好的数字
    7. int i = low;
    8. int j = mid+1;
    9. int k = 0;
    10. while (i <= mid && j <= high){ //从小到大排序
    11. if(a[i]<= a[j]){
    12. tmp[k++] = a[i++];
    13. }
    14. else {
    15. tmp[k++] = a[j++];
    16. }
    17. }
    18. //剩余未排序完的数字直接拼接到数组后
    19. while (i <= mid){
    20. tmp[k++]=a[i++];
    21. }
    22. while (j <= high){
    23. tmp[k++]=a[j++];
    24. }
    25. //返回排序好的数组,即用数组tmp覆盖数组a
    26. for (int l = 0; l < tmp.length; l++) {
    27. a[l+low]=tmp[l];
    28. }
    29. }
    30. //归并排序
    31. public static void mergeSort(int[] a, int low, int high) {
    32. int mid=(high+low)/2;
    33. if (low<high){
    34. mergeSort(a,low,mid);
    35. mergeSort(a,mid+1,high);
    36. merge(a,low,mid,high);
    37. System.out.println(Arrays.toString(a));
    38. }
    39. }
    40. public static void main(String[] args) {
    41. int a[] = { 51, 46, 20, 18, 65, 97, 82, 30, 77, 50 };
    42. mergeSort(a, 0, a.length - 1);
    43. System.out.println("排序结果:" + Arrays.toString(a));
    44. }
    45. }