shell排序算法 - webdancer's Blog

shell排序算法

webdancer posted @ 2010年9月22日 03:40 in 算法 with tags 算法 排序 , 1453 阅读

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;
			}
		}
	}
}	

我觉得还是挺有趣的,注意算法在利用直接插入时的方法,后面的元素不断的插入。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee