我之前问过这个问题,但是我的帖子里堆满了一大堆其他代码并且没有清楚地呈现出来,所以我要再试一次。对不起,我是新来的
壳牌排序,我是怎么写的,只在某些时候有效。Arraya
是一个包含 100 个未排序整数inc
的数组,是一个由 4 个整数组成的数组,其值是 shell 排序应该使用的间隔(它们下降并且最终值始终为 1),count
是一个存储不同运行 shell 排序的计数的数组,cnt
表示应该为此运行的 shell 排序更新的计数值。
当我以不同的 4 个间隔多次运行 shell 排序时,只有有时排序才能完全工作。一半时间数组完全排序,另一半时间数组部分排序。
任何人都可以帮忙吗?提前致谢!
public static void shellSort(int[] a, int[] inc, int[] count, int cnt) {
for (int k = 0; k < inc.length; k++) {
for (int i = inc[k], j; i < a.length; i += inc[k]) {
int tmp = a[i];
count[cnt] += 1;
for (j = i - inc[k]; j >= 0; j -= inc[k]) {
if (a[j] <= tmp)
break;
a[j + inc[k]] = a[j];
count[cnt] += 1;
}
a[j + inc[k]] = tmp;
count[cnt] += 1;
}
}
}