简单java程序员改错···
//编程实现自然合并排序算法。packagetest;publicclassSort{staticint[]b;//staticintf=0;/***@paramargs...
//编程实现自然合并排序算法。
package test;
public class Sort {
static int[] b;
// static int f=0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("输入数组的个数:");
int n=Utility.input();
System.out.println("输入数组的元素:");
int []a=new int [n];
for(int i=0;i<n;i++)
{
a[i]=Utility.input();
}
fun(a);
System.out.println("结果为:");
//if(f==1)
//for(int i=n-1;i>=0;i--)
//{
// System.out.println(a[i]+" ");}
//else
for(int i=0;i<n;i++)
{
System.out.println(a[i]+" ");
}
}
private static void fun(int[] a) {
// TODO Auto-generated method stub
int s,e,m;
int i,j;
int []c=new int [a.length+1];
initArr(a,c);
while(true)
{
// if(f==1)break;
s=0;i=0;j=0;
while (true) {
m=c[i++];
if(m==-1)
break;
e=c[i++];
if(e==-1)
{
c[j++]=m;
break;
}
merge(a,b,s,m,e);
copy(b,a,s,e);
c[j++]=e;
s=e+1;
c[j]=-1;
if(s==0)
break;
}
}
}
private static void copy(int[] b2, int[] a, int s, int e) {
// TODO Auto-generated method stub
for(int i=s;i<e+1;i++)
{
a[i]=b[i];
}
}
private static void merge(int[] a, int[] b2, int s, int m, int e) {
// TODO Auto-generated method stub
int i=s;
int j=e+1;
int k=s;
while ((i<=m)&&(j<=e)) {
if(a[i]<a[j])
{b[k++]=a[i++];}
else b[k++]=a[j++];
}
if(i>m)
{ while(j<=e)
{b[k++]=a[j++];}
}
else {
while (i<=m) {
b[k++]=a[i++];
}
}
}
public static void initArr(int[] a, int[] c) {
// TODO Auto-generated method stub
int i,j=0;
for(i=0;i<a.length-1;i++)
{
if(a[i]>a[i+1])
c[j++]=i;
}
c[j++]=i;
// if(j==a.length)f=1;
// else
c[j]=-1;
}
}
==========================
输入数组的个数:
4
输入数组的元素:
4
5
6
3
Exception in thread "main" java.lang.NullPointerException
at test.Sort.merge(Sort.java:87)
at test.Sort.fun(Sort.java:54)
at test.Sort.main(Sort.java:19) 展开
package test;
public class Sort {
static int[] b;
// static int f=0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("输入数组的个数:");
int n=Utility.input();
System.out.println("输入数组的元素:");
int []a=new int [n];
for(int i=0;i<n;i++)
{
a[i]=Utility.input();
}
fun(a);
System.out.println("结果为:");
//if(f==1)
//for(int i=n-1;i>=0;i--)
//{
// System.out.println(a[i]+" ");}
//else
for(int i=0;i<n;i++)
{
System.out.println(a[i]+" ");
}
}
private static void fun(int[] a) {
// TODO Auto-generated method stub
int s,e,m;
int i,j;
int []c=new int [a.length+1];
initArr(a,c);
while(true)
{
// if(f==1)break;
s=0;i=0;j=0;
while (true) {
m=c[i++];
if(m==-1)
break;
e=c[i++];
if(e==-1)
{
c[j++]=m;
break;
}
merge(a,b,s,m,e);
copy(b,a,s,e);
c[j++]=e;
s=e+1;
c[j]=-1;
if(s==0)
break;
}
}
}
private static void copy(int[] b2, int[] a, int s, int e) {
// TODO Auto-generated method stub
for(int i=s;i<e+1;i++)
{
a[i]=b[i];
}
}
private static void merge(int[] a, int[] b2, int s, int m, int e) {
// TODO Auto-generated method stub
int i=s;
int j=e+1;
int k=s;
while ((i<=m)&&(j<=e)) {
if(a[i]<a[j])
{b[k++]=a[i++];}
else b[k++]=a[j++];
}
if(i>m)
{ while(j<=e)
{b[k++]=a[j++];}
}
else {
while (i<=m) {
b[k++]=a[i++];
}
}
}
public static void initArr(int[] a, int[] c) {
// TODO Auto-generated method stub
int i,j=0;
for(i=0;i<a.length-1;i++)
{
if(a[i]>a[i+1])
c[j++]=i;
}
c[j++]=i;
// if(j==a.length)f=1;
// else
c[j]=-1;
}
}
==========================
输入数组的个数:
4
输入数组的元素:
4
5
6
3
Exception in thread "main" java.lang.NullPointerException
at test.Sort.merge(Sort.java:87)
at test.Sort.fun(Sort.java:54)
at test.Sort.main(Sort.java:19) 展开
4个回答
展开全部
merge方法里唯一有可能空指针异常的就是数组了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
merge(a,b,s,m,e);调用这个方法的时候怎么没看到你定义b数组?这个b应该是c吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java中本来就有sort这个方法吧 就是在util.arrays 您真想写的话可以参考一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询