我的希尔排序时在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);
}
}