希尔排序终点在于分组。
分组的规律:数组长度除以2。即[low+(high-low)]/2;以此作为增量
让每组的同号相互比较。(注意:如果数组是奇数,则会导致分组平均,会产生第三个组,则让这组数据与前一组相比较)
数据6就和数据4相互比较。
然后再次循环,并且以第一次分组数除以2取整,再次分组。直至增量为1。同时,希尔排序是在插入排序的基础上进行的。
//递归排序
void intsert_sort2(int arr[], int size)
{
int i, j, temp,jump=size>>1;
while (jump != 0)
{
for (i = jump; i < size; ++i)
{
temp = arr[i];
for (j = i - jump; j >= 0 && temp < arr[j]; j-=jump)
{
arr[j + jump] = arr[j];
}
arr[j + jump] = temp;
}
jump >>= 1;
}
}
int main(void)
{
int arr[10] = {5,3,6,8,1,4,2,9,0,7 };
// a(arr, 10);
intsert_sort2(arr,10);
for (int i = 0; i < 10; i++)
{
cout << arr[i];
}
}