日期:2014-05-20  浏览次数:20689 次

java初学者小问题
一个错排问题
public void perm(String []buf,int start,int end){   //对n个篮球进行全排列,进行递归求解
// buf为全排列数组
if(start==end){  //只有一个球进行全排列时,则不需要再递归
if(check(buf)){    //检查是否符合要求,如果符合要求,则输出
for(int i=0;i<buf.length;i++){
System.out.print(basckets[i]+"("+buf[i]+") ");

}
System.out.println();
}
}
else{
for(int i=start;i<=end;i++){
String temp=buf[i];      //交换i与start元素的值
buf[i]=buf[start];
buf[start]=temp;

perm(buf,start+1,end); //递归求解球的全排列

temp=buf[i]; //还原i与start元素的值
buf[i]=buf[start];
buf[start]=temp;

}
}

}
谁能够解释一下这个函数 我没看懂

------解决方案--------------------
引用:
Quote: 引用:

不晓得你哪里不懂,这个函数应该蛮容易看的别人都加注解了
这个函数主体是一个if(){}else{}语句,其中if判断是否只有一个篮球进行全排列,是的话就执行if后面的语句,直接将篮球这个数组打印出来;如果不是只有一个篮球进行排序的话,就会执行下面的else语句,里面是一个排序。
你可能是不懂这个排序,这个排序感觉有点蛋疼,有点看不懂他想要按什么要求排序,如果不是有什么特殊要求的排序的话,不建议你参考学习他的这个排序方法,他就是在这个方法中调用方法本身,然后这个方法执行到else里面这里的时候又会调用一次这个方法,这样一直循环到start和end 相等然后就可以把它输出出来。
看不懂也就算了。我没有测试过,但感觉他这个要么错的,就算是对的耗费的时间也会比其他方式要久很多,而且很蛋疼,灰常不利于别人看。
交换i与start元素值的意义是什么 能不能用流程图那样的方式说一下 

对一个数组进行排序计算机不能像人那样有逻辑的直接判断所有元素的大小,所以他会用循环将数组里面的元素两两比较,然后按照你的要求,比如说大的放后面,那么他就会看着两个元素哪个大些,后面的大些就不管,前面的大些就将他们交换位置,这样循环一边就可以比较出一个最大值,然后将这个循环放入另外一个循环里面嵌套,就可以进行多次循环从而达到排序的目的,这个就是冒泡排序了。
他这个里面的交换就是用来做这个的,他用的是新建一个缓冲变量的方式,先将一个变量赋给缓冲变量,然后用另外一个变量将前一个变量覆盖,然后用缓冲变量将后一个变量覆盖的方式进行的交换。