public static void sort(long[] arr){
int h = 1; // 初始化间隔
// 计算最大间隔
while(h < arr.length / 3){
h = 3 * h + 1;
}
while(h > 0){
long temp = 0;
for(int i = h; i < arr.length; i++){
temp = arr[i]; // temp等于数组第i个元素的值
int j = i;
while(j > h - 1 && arr[j - h] > temp){
arr[j] = arr[j - h];
j-=h;
}
arr[j] = temp;
}
// 下一个h值
h = (h - 1) / 3;
}
}
Question :
while(j > h - 1 && arr[j - h] > temp) Dans cette ligne de code, j > je ne comprends pas pourquoi j > exception hors limites, et j > h - 1 ne le fera pas.
@马如风 , pouvez-vous m'aider à jeter un œil ? Merci~
j > h - 1 && arr[j - h] >
En prenant ces deux phrases ensemble, votre j>0 ne peut pas garantir que j - h soit supérieur ou égal à 0.Je pense aussi qu'il se peut que j>0 ne puisse pas satisfaire la situation de j-h>=0. Vous pouvez rendre le tableau arr très grand. Si cela ne va toujours pas, cela doit être la raison. Mais du point de vue du code, je pense que j-h est toujours supérieur ou égal à 0. Je vous aiderai à le déboguer et à l'analyser plus tard.