/* shellsort : sort v[0]...v[n-1] into increase order */
void shellsort(int v[], int n)
{
int gap, i, j, temp;
for (gap = n / 2; gap > 0; gap /= 2)
{
for (i = gap; i < n; i++)
{
for (j = i - gap; (j >= 0) && (v[j] > v[j + gap]); j -= gap)
{
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
}
}
}
}
该函数包含一个三重嵌套的for循环语句:最外层的for循环控制两个被比较的元素之间的距离,从 n/2 开始,逐步进行对折,直到为0;中间的for循环用于逐个选取要比较的元素;最内层的语句用于比较各对相距gap个位置的元素,当这两个元素逆序时将它们互换过来。由于gap值最终会递减到1,因此所有元素最终会位于正确的位置上。最外层的for循环的控制变量变化规则可以适当变化。