bobo老师,在java归并排序时的问题

来源:3-2 归并排序法的实现

qq_无限之光_0

2019-03-12

public class MergeSort<E extends Comparable//归并排序
{

public void Sort(E arr[],int n)
{
	mergesort(arr,0,n-1);
}


private void mergesort(E arr[],int l,int r)
{
	if(l>=r)//不可能情况
		return;
	int mid=(l+r)/2;
	mergesort(arr, l, mid);
	mergesort(arr,mid+1, r);
	
	Merge(arr,l,mid,r);//归并操作
	
}

private void Merge(E arr[],int l,int mid,int r)
{
	E[] aux=(E[])new Object[r-l+1];
	for(int i=l;i<=r;i++)
	{
		aux[i-l]=arr[i];//创建临时空间
	}
	
	int i=l;int j=mid+1;
	for(int k=l;k<=r;k++)
	{
		if(i>mid)//特殊情况
		{
			arr[k]=aux[j-l];
			j++;
		}
		
		else if(j>r)
		{
			arr[k]=aux[i-l];
			i++;
					
		}
		
		else if(aux[i-l].compareTo(aux[j-l])<0)
		{
			arr[k]=aux[i-l];
			i++;
		}
		
		else 
		{
			arr[k]=arr[j-l];
			j++;
		}
	}
}

}

在Main方法运行时似乎在E[]aux=(E[])object[r-l+1]这一行出现了异常 但不知道为什么会发生这个异常?

写回答

1回答

liuyubobobo

2019-03-12

什么异常呢?把产生错误的main函数或者Main类也提供一下?


另外,课程的所有代码都可以通过官方github获得。包括Java代码,按照课程的小节对应的。可以先尝试在你的环境下运行课程的官方代码,看是否有同样的问题?如果没有问题,请仔细比对调试自己的代码,看哪里有问题。调试代码,可是学习算法,锻炼编程能力的重要途径哦。


课程官方github传送门:https://github.com/liuyubobobo/Play-with-Algorithms


本小节Java代码传送门:https://github.com/liuyubobobo/Play-with-Algorithms/tree/master/03-Sorting-Advance/Course%20Code%20(Java)/02-Merge-Sort/src/bobo/algo


加油!:)

0
3
liuyubobobo
回复
qq_无限之光_0
new的是Object,Object不是Comparable的,但是泛型限制中E是Comparable的,所以Object不能强转成E。
2019-03-12
共3条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程