Java实现归并排序

归并排序用到的方法就是分治法(divided-conquer-combined)

思想就是:将数组分成两个数组,如果两个数组的元素都是有序的,那么就可以很方便的将这两组数据归并。如果没有序继续将两组数组分组,以此类推,当组内只有一个数据时,认为这个小组内已经有序,然后合并相邻两个小组就可以。

Java代码如下

package sort;
//归并排序
//2015-05-31
public class MergeSort {
//归并排序用的是分治法,divided——conquer——combined
    public void mergesort(int a[],int first,int last,int temp[]){
        if(first==last){
            temp[first]=a[first];
        }
        else {int mid=(first+last)/2;
        //递归
        //对左边进行排序
        mergesort(a,first,mid,temp);
        //对右边进行排序
        mergesort(a,mid+1,last,temp);
        //进行归并
        mergearray(a,first,mid,last,temp);
    }
    }
    public void mergearray(int a[],int first,int mid,int last,int temp[]){
        int i=first;
        int j=mid+1;
        int m=mid;
        int n=last;
        int k=0;
        while(i<=m&&j<=last){
            if(a[i]<a[j]){
                temp[k++]=a[i++];
            }
                else {
                    temp[k++]=a[j++];
                }
            }
        while(i<=m){
            temp[k++]=a[i++];
        }
        while(j<=n){
            temp[k++]=a[j++];
        }
        for(i=0;i<k;i++){
            a[i+first]=temp[i];
        }
        }
    }

这里遇到的问题有两个
case1:递归导致内存溢出

if(first==last){
            temp[first]=a[first];
        }
        else {int mid=(first+last)/2;
        //递归

当时没有对first和last进行比较,结果导致内存溢出
case2: 数组初始化是没有给定

int[] temp = new int[a.length ] ;

该过即可正常编译通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值