shell排序算法 - webdancer's Blog
shell排序算法
shell排序算法是一种插入排序算法,直接的插入算法很简单,shell算法不同于直接插入的插入时小步挪动,而做长距离的跳动。它由Donald Shell于1959年提出。
shell算法也叫作“减少增量的排序算法”,每一遍通过增量h,使得那些相距h的记录排序。增量的序列不是固定的,确定最好的增量序列需要大量的数学知识。
shell算法:
<1>确定增量序列S[ t]。
<2>对给出的记录,按照增量序列S,进行t遍排序。
<3>对每遍进行直接插入。
/*为了编程方便,增量序列采用: [n/2,n/4,......,1].实际的增量序列很是有趣。 */ void shsort(int a[],int n){ int i,j; for(i=n/2;i>=1;i/=2){ for(j=i;j<n;j++){ int k; for(k=j-i;k>=0&&a[k]>a[k+i];k-=i){ int t=a[k]; a[k]=a[k+i]; a[k+i]=t; } } } }
我觉得还是挺有趣的,注意算法在利用直接插入时的方法,后面的元素不断的插入。