为了账号安全,请及时绑定邮箱和手机立即绑定

java归并排序

标签:
Java

概述

归并排序与快速排序相同,同样是借鉴二叉树的思想,时间复杂度O(n),与快速排序一样是大量数据排序的最优方式之一。

思路分析

归并排序是将目标数组分成左右两个数组,左右两个数组必须是有序的,然后对这两个数组合并从而实现排序。对于任意的数组都可以将所有的数据分成若干个数组,每个数组中都只有一个元素,然后两两合并。(因此,归并排序的内存开销会比快速排序多)

代码实现

  private void mergeSort(int[] array, int left, int right) {        if (left >= right) {            return;
        }        int mid = (left + right) >> 1;
        mergeSort(array, left, mid);
        mergeSort(array, mid + 1, right);
        merge(array, left, mid + 1, right);
    }    private void merge(int[] array, int left, int mid, int right) {        int leftSize = mid - left;        int rightSize = right - mid + 1;        int[] leftArray = new int[leftSize];        int[] rightArray = new int[rightSize];
        System.arraycopy(array, left, leftArray, 0, leftSize);
        System.arraycopy(array, mid, rightArray, 0, rightSize);        int index=left;        int leftIndex = 0;        int rightIndex = 0;        while (leftIndex<leftSize&&rightIndex<rightSize){            if(leftArray[leftIndex]<rightArray[rightIndex]){                array[index++] = leftArray[leftIndex++];
            }else {                array[index++] = rightArray[rightIndex++];
            }
        }        while (leftIndex<leftSize){            array[index++] = leftArray[leftIndex++];
        }        while (rightIndex<rightSize){            array[index++] = rightArray[rightIndex++];
        }
    }

测试代码

 @Test    public void testMergeSort() {        int[] array = new int[]{1, 3, 4, 10, 2, 5, 6, 9, 7, 8};
        mergeSort(array, 0, array.length - 1);        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

结果打印

1
2
3
4
5
6
7
8
9
10



作者:夜亦明
链接:https://www.jianshu.com/p/31f982cac502


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消