算法:
1、先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。
2、所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序。
3、取第二个增量d2<d1重复上述的分组和排序,
4、直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
03.int main() 04.{ 05. const int n = 5; 06. int i, j, temp; 07. int gap = 0; 08. int a[] = {5, 4, 3, 2, 1}; 09. while (gap<=n) 10. { 11. gap = gap * 3 + 1; 12. } 13. while (gap > 0) 14. { 15. for ( i = gap; i < n; i++ ) 16. { 17. j = i - gap; 18. temp = a[i]; 19. while (( j >= 0 ) && ( a[j] > temp )) 20. { 21. a[j + gap] = a[j]; 22. j = j - gap; 23. } 24. a[j + gap] = temp; 25. } 26. gap = ( gap - 1 ) / 3; 27. } 28. }