0
点赞
收藏
分享

微信扫一扫

排序(4)希尔排序


希尔排序又称为"缩小增量排序",是对插入排序的一种改进。

基本思想:设定一个元素间隔增量gap,将参加排序的序列按这个间隔数gap从第一个元素开始依次分成若干个子序列。在子序列中再用其他排序方法,然后缩小增量gap,重新将整个序列按照新的间隔数gap进行划分,再分别对每个子序列进行排序。如此将“缩小增量gap——划分序列——将每个子序列排序”的操作进行下去,直到间隔数增量gap=1为止。


一般情况下,当增量gap缩小到1时,序列几乎都已经按值有序,不需要进行较多的元素移动就能达到排序的目的。


如何选取gap值? 常用且效果很好的gap值取法:首先gap取值为序列长度的一半。而在后续的排序过程中,后一趟排序的gap取值为前一趟排序gap取值的一半即可。


算法描述:

void shellsort(keytype k[],int n) {
	int i,j,flag,gap=n;
	keytype tmp;
	while(gap>1) {
		gap =gap/2;
		do {
			flag=0;
			for(i=1;i<=n-gap;i++) {
				j=j+gap;
				if(k[i]>k[j]) {
					tmp = k[i];
					k[i]=k[j];
					k[j]=tmp;
					flag=1;
				}
			}
		}while(flag!=0);
	}
}


参考

点击打开链接



举报

相关推荐

0 条评论