我的希尔排序时在while(j>-1&&data[j]>temp)这里,用&就会报数组下标越界,而用&&就能正常运行。
package work11;
import java.util.Arrays;
public class SortDemo {
/**
* 希尔排序
* @param data
* @param d
*/
public static void shellSort(int []data){
int i,j,temp;
for(int d=data.length/2;d>0;d/=2){
for( i=d;i<data.length;i++){
j=i-d;
temp=data[i];
while(j>-1&&data[j]>temp){
data[j+d]=data[j];
j-=d;
}
data[j+d]=temp;
}
System.out.println(Arrays.toString(data));
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] data3 = {503,17,512,908,170,897,275,653,426,154,509,612,677,765,703,94};
System.out.println("希尔排序每一趟的结果为:");
shellSort(data3);
}
}
你要理解&和&&的用法。
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632