首页 > 代码库 > 希尔排序

希尔排序

算法:

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. }  

 

希尔排序