原理如下:
代码如下:
#includevoid ShellSort(int a[],int n){ int dk,i,j; for(dk=n/2;dk>=1;dk=dk/2){ //步长变化 for(i=dk+1;i<=n;i++){ //i为步长+1为下标的元素(即子表中第二个元素),这里注意i++每次+1是交替子表进行插入排序,但是逻辑一样 if(a[i]0 && a[j]>a[0];j-=dk){ //j>0是判断子表前面是否还有元素 a[j+dk]=a[j]; //元素右移 } a[j+dk]=a[0]; //赋值到该插入位置 } } } } int main() { int a[]={0,49,38,65,97,76,13,27,49,55,4}; ShellSort(a,10); for(int i=1;i<11;i++){ printf("%3d",a[i]); } }



