归并排序

java归并排序

1、算法思想:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分:问题分成一些小的问题然后递归求解,治:的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。将序列递归拆半分成多个子序列,再将各个子序列排序后归并叠加,最后归并所有子序列,排序完成。

2、算法过程

举个栗子(第一趟的排序过程)

原始序列:49、38、65、97、76、13、27

1)将原始序列看成7个只含一个元素的子序列,此时序列都是有序的

子序列1:49

子序列2:38

子序列3:65

子序列4:97

子序列5:76

子序列6:13

子序列7:27

2)两两归并,形成若干有序二元组,序列1和序列2归并,序列3和序列4归并…

结果:{38、49、}{65、97、}{13、76、}{27}

3)将这个序列看成若干二元组子序列

子序列1:38 49

子序列2:65 97

子序列3:13 76

子序列4:27

4)两两归并,形成若干有序四元组

结果:{38、49、65、97、}{13、27、76}

5)最后仅有两个子序列再次两两归并,完成最终排序

结果:{13、27、38、49、65、76、97}

public class Mergesort {
    static int[] merge = {4,5,3,6,2,5,1};
    static int[] temp = new int[7];
    public static void main(String[] args) {
        mergesort(0,6);
        System.out.println(Arrays.toString(merge));
    }
    public static void mergesort(int l,int r){
        if (l<r){
            int middle = (l+r)/2;
            mergesort(l,middle);
            mergesort(middle+1,r);
            merge(l,r,middle+1);
        }
    }
    public static void merge(int l,int r,int middle){
        int m = l;
        int n = middle;
        int p = l;
        while (m<middle && n<=r){
            if (merge[m]<merge[n])
                temp[p++]=merge[m++];
            else
                temp[p++]=merge[n++];
        }
        while (m<middle){
            temp[p++]=merge[m++];
        }
        while (n<=r){
            temp[p++]=merge[n++];
        }
        p=l;
        m=l;
        while (p<=r){
            merge[m++]=temp[p++];
        }

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值