Java——归并排序算法的递归实现

归并排序

归并排序算法采用分治策略,将两个已有序的序列归并为一个更大的有序序列,通过递归思想,层层合并,最终得到一个完整的有序序列。

Java实现

递归排序

    public static void mergeSort(int[] array ,int low , int high){
        if(low < high ){
            int mid = (low + high)/2;
            //归并左边
            mergeSort(array , low , mid);
            //归并右边
            mergeSort(array , mid + 1 , high);
            //归并左右两个子数组
            merge(array , low  , high);
        }
    }

归并两个已有序的序列

    public static void merge(int[] array,int low , int high){
        int mid = (low + high)/2;
        //创建两个数组暂时存放子数组
        int[] a = new int[mid - low + 1];
        int[] b = new int[high - mid];
        for (int i = low , j = 0; i <= mid ; i++,j++) {
            a[j] = array[i];
        }
        for (int i = mid + 1 , j = 0; i <= high ; i++,j++) {
            b[j] = array[i];
        }
        int i , j , k;
        for(i = 0 , j = 0 , k = low; i < a.length && j < b.length ; k++){
            if(a[i] < b[j]){
                array[k] = a[i++];
            }else{
                array[k] = b[j++];
            }
        }
        //剩下的元素直接放入
        if(i == a.length){
            while( j < b.length)
                array[k++] = b[j++];
        }else if (j == b.length){
            while ( i < a.length )
                array[k++] = a[i++];
        }
    }
测试和运行结果
    public static void main(String[] args) {
        int[] a = new int[]{5, 7, 9, 8, 6, 3, 4, 2, 1};
        mergeSort(a , 0 , a.length - 1);
        display(a);
    }
1 2 3 4 5 6 7 8 9 
算法特点
  • 归并排序算法是稳定的排序算法
  • 时间复杂度O(n*logn)
  • 空间复杂度O(n)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值