class Test33 {
static void s(int b[ ], int k) {
int i,j,t;
for(i = 1;i< k; i++){
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
public static void main(String []args){
int i, a[]={6, 12, 7, 11, 5 };
s(a,5);
for(i=0;i<a.length; i++)
System.out.print(a[i]+" ");
System.out.Println();
}
} 我是新手for(i = 1;i< k; i++){
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
这段程序看了好久没看懂希望好心人 详细解答
static void s(int b[ ], int k) {
int i,j,t;
for(i = 1;i< k; i++){
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
public static void main(String []args){
int i, a[]={6, 12, 7, 11, 5 };
s(a,5);
for(i=0;i<a.length; i++)
System.out.print(a[i]+" ");
System.out.Println();
}
} 我是新手for(i = 1;i< k; i++){
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
这段程序看了好久没看懂希望好心人 详细解答
b[j+l]=b[j];
当第一次循环时,b[j+l] 是第零个元素,这是可以的。但b[j]就变成第-1个元素了。运行的话 肯定报数组越界异常(ArrayIndexOutOfBoundsException )
for(i = 1;i< k; i++){ //这个是外层循环 是标准的循环语句
//内层循环
//t=b[i], 给t赋值
//j=i-1 给j赋值 作为循环的判断变量
// j>=0 && t<b[j] 循环的条件
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
其实上面的内层循环可以写成
t=b[i];for(j = i-1; j > = 0; j--){
//先给t赋值
if(t<b[j]){
b[j+l]=b[j];
b[j+1]=t;
}else{
black;
}
}
for(i = 1;i < k; i++){ //这个是外层循环 是标准的循环语句
//内层循环
//t=b[i], 给t赋值
//j=i-1 给j赋值 作为循环的判断变量
// j> =0 && t <b[j] 循环的条件
for(t=b[i], j=i-1; j> =0 && t <b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
其实上面的内层循环可以写成
t=b[i]; for(j = i-1; j > = 0; j--){
//先给t赋值
if(t <b[j]){
b[j+l]=b[j];
b[j+1]=t;
}else{
black;
}
}
这里是不是应该这样啊加上大括号 for(t=b[i], j=i-1; j> =0 && t <b[j];j--)
{ b[j+l]=b[j];
b[j+1]=t;
}
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j+1]=t;
}
}
实际上就是排序,对于int i, a[]={6, 12, 7, 11, 5 };
第一次t = 12,j = 0 b[0] = 6,因为t > b[j]所以不做任何事,在内层for循环结束时为b[1]赋值,b[1] = t = 12
第二次 t = 7,j = 1,b[1] = 12,t < b[1],所以b[2] = b[1] = 12,j--;
j = 0时,t = 7,b[0] = 6,t > b[0],所以不做任何事,在内层for循环结束时为b[1]赋值,b[1] = t = 7
后面同理。
这相当于选择排序
static void s(int b[ ], int k) {
int i,j,t;
for(i = 1;i< k; i++){
for(t=b[i], j=i-1; j>=0 && t<b[j];j--)
b[j+l]=b[j];
b[j]=t;
}
}
public static void main(String []args){
int i, a[]={6, 12, 7, 11, 5 };
s(a,5);
for(i=0;i<a.length; i++)
System.out.print(a[i]+" ");
System.out.Println();
}
}
不好意思 我对上面的源代码更正一下 这个才是对的
int b[]={6, 12, 7, 11, 5 };
int i,j,t;
for(i = 1;i< 5; i++){
for(t=b[i], j=i-1; j>=0 && t<b[j];j--){
b[j+1]=b[j];
b[j]=t;
}
}
for(i=0;i<b.length; i++)
System.out.print(b[i]+" ");
}