如何设置步长:h[t]=1, h[m-1]=2h[m+1];t=log2(n-1)到 Shell 排序算法?我自己尝试过,用不同的步骤获取源代码,替换我自己的,但没有成功。如何设置步骤?
void ShellSort(int* a, size_t n, size_t* bc, size_t* ac, size_t* am) /*шаг задается формулой h[t]=1, h[m-1]=2h[m+1]; t=log2(n-1)*/
{
const int t = (int)(log2(n-1));
int i, j, k, m, x;
/* формирование массива шагов*/
int* h = (int*)malloc(t * sizeof(int));
h[t] = 1;
for (m = t - 2; m >= 0; m--)
h[m-1] = 2*h[m + 1];
/*непосредственно сортировка*/
for (m = 0; m < t; m++) /*последовательно перебираем все расстояния*/
{
k = h[m];
for (i = k; i < n; i++) /*до конца цикла метод вставки с учетом шага h[m]*/
{
x = a[i]; j = i - k;
while (j >= 0 && x < a[j])
{
a[j + k] = a[j];
j -= k;
}
a[j + k] = x;
}
}
free(h);
}