希尔排序是插入排序的改进版,设定一个间隔(increment),对处在间隔上的元素进行排序,然后再缩小间隔直至0
缩小的方式有多个版本,此处为二分。
另外的版本:
increment初始值为1,直到9*increment > size一直重复increment = 3*increment +1来找到increment的值,然后才开始进入while(increment>0)。
在循环里面increment = increment / 3,直到increment 为0。
void shellSort(int numbers[], int array_size)
{
int i, j, increment, temp;
increment = 4;
while (increment > 0)
{
for (i=0; i < array_size; i++)
{
j = i;
temp = numbers[i];
while ((j >= increment) && (numbers[j-increment] > temp))
{
numbers[j] = numbers[j - increment];
j = j - increment;
}
numbers[j] = temp;
}
if (increment/2 != 0)
increment = increment/2;
else if (increment == 1)
increment = 0;
else
increment = 1;
}
}