基本思想是:
先对隔得比较远的元素进行比较,而不是像简单交换顺序算法中那样比较相邻的元素。
这样可以快速地减少大量的无序情况,以后就可以少做些工作。各个被比较的元素之间的距离在逐步减少,一直减少到1,此时排序变成了相邻元素的互换。
/*以递增顺序对v[0]、v[1]、......、v[n-1]进行排序*/ void shellsort(int v[],int n) { int gap,i,j,temp; for(gap=n/2;gap>0;gap/=2) for(i=gap;i<n;i++) for(j=i-gap;j>=0&&v[j]>v[j+gap];j-=gap) { temp=v[j]; v[j]=v[j+gap]; v[j+gap]=temp; } }