归并排序的思路与java实现

归并排序通俗来说就是分和治两个过程。

        首先将一组无序的数组平均分为两个数组,然后再分,一直分到只剩下两个数为止。

        然后到了治阶段,拿4 5 7 8与1 2 3 6作举例,即先比较4和1的大小,发现4大于1,那么将1放入到最后的数组中。再将4和2比较,4仍大于2,将2放入数组中。将4和3比较,将3放入数组中。将4与6比较,发现4小于6,那么将4放入数组中,直到所有的数都放入到数组中即可。

public class guiBing {
    public static void main(String[] args) {
        int[] arr = {9, 4, 5, 8, 1, 3, 7};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void sort(int[] arr) {
        int[] temp = new int[arr.length];//注意长度
        sort(arr,0,arr.length-1,temp);
    }

    public static void sort(int[] arr, int left, int right, int[] temp) {
        if (left < right) {
            int mid = (left + right) / 2;
            sort(arr, mid + 1, right, temp);
            sort(arr, left, mid, temp);
            megre(arr, left, mid, right, temp);

        }
    }

    public static void megre(int[] arr, int left, int mid, int right, int[] temp) {
        int i = left;
        int j = mid + 1;
        int t = 0;
        while (i <= mid && j <= right) {
            if (arr[i] <= arr[j]) {
                temp[t++] = arr[i++];
            } else {
                temp[t++] = arr[j++];
            }
        }
        while (i<=mid){
            temp[t++] = arr[i++];
        }
        while (j<=right){
            temp[t++] = arr[j++];
        }
        t=0;
        while (left<= right){
            arr[left++]=temp[t++];
        }

    }
}

时间复杂度:O(nlogn)

   空间复杂度:O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值