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;
}
}
}
}
我觉得还是挺有趣的,注意算法在利用直接插入时的方法,后面的元素不断的插入。
评论 (0)