黑衣人1—3百度云:哪位高人能帮我解释一下这个java程序?

来源:百度文库 编辑:高考问答 时间:2024/04/23 14:29:30
abstract class Sortable
{ public abstract int compare(Sortable b);
public static void shell_sort(Sortable[]a)
{int n=a.length;
int incr=n/2;
while(incr>=1)
{for(int j=incr;i<n;i++)
{Sortable temp=a[i];
int j=i;
while(j>=incr&&temp.compare(a[j-incr])>0)
{a[j]=a[j-incr];
j-=incr;
}
a[j]=temp;
}
incr/=2;
}
}
}
请详细点,谢谢。应该是循环做到incr<1不做吧。应该是for(int i=incr;i<n;i++) ,写错了
我也明白每句的意思,可就是不太了解他的思路。

public abstract int compare(Sortable b); //抽象类
public static void shell_sort(Sortable[]a)//静态类
整形变量N=接受近来a的长度数
整形变量 incr=a的长度除以2的数
while(incr>=1) //循环做到incr>=1不做(循环里面套2个循环)
{
for(int j=incr;i<n;i++)//循环之1 (少int i=0变量) j的开始值=a的长度除以2的数 循环之1作到I<n的值跳到incr/=2; {
Sortable temp=a[i]; //一个新Sortable类型变量temp=接收近来a的第i位的值
int j=i; //把循环I的值给J
while(j>=incr&&temp.compare(a[j-incr])>0) //循环2 做到j>=接受近来a的长度数和比较temp.compare()里值是否>0
{
a[j]=a[j-incr]; //新的a第J位的值=以前a第J位的值-a的长度除以2的数
j-=incr; //J值=J-a的长度除以2的数
}
a[j]=temp; //a第J位的值=接收近来a的第i位的值
}
incr/=2; //incr的值除以2
}

我不知道你什么地方不明白,这个不是很明了 吗?

abstract class Sortable {
public abstract int compare(Sortable b);
public static void shell_sort(Sortable[]a) {
int n=a.length;
int incr=n/2;
while(incr>=1) {
for(int j=incr;i<n;i++) {
Sortable temp=a[i]; //new一个Sortable类型Sortable,因为这个类为abstract,,a[i] 看这public static void shell_sort(Sortable[]a)
int j=i;
while(j>=incr&&temp.compare(a[j-incr])>0) {
a[j]=a[j-incr];
j-=incr;
}
a[j]=temp;
}
incr/=2;
}
}
}

其他的好象没什么可说的!

楼下的真强!给分吧!,你应该没什么疑问了吧,