希尔排序的思想:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
代码:
#include<stdio.h> int a[ 100]; int n; void Shellpass( int a[], int d) // 希尔排序的一趟排序,d为当前增量。 { int i,j; for(i=d+ 1;i<=n;i++) if(a[i]<a[i-d]) { a[ 0]=a[i]; j=i-d; do{ a[j+d]=a[j]; j=j-d; } while(j> 0&&a[ 0]<a[j]); a[j+d]=a[ 0]; } } void ShellSort( int a[]) { int increment=n; do{ increment=increment/ 3+ 1; Shellpass(a,increment); } while(increment> 1); } int main() { int i,j; printf( " Enter n: "); scanf( " %d ",&n); printf( " Enter %d integer:\n ",n); for(i= 1;i<=n;i++) scanf( " %d ",&a[i]); ShellSort(a); printf( " After sorted: "); for(i= 1;i<=n;i++) printf( " %4d ",a[i]); printf( " \n "); return 0; } /* Enter n:10Enter 10 integer:48 15 78 92 -98 14 26 3 78 102After sorted: -98 3 14 15 26 48 78 78 92 102请按任意键继续. . . */