纯手撸——希尔排序

思想:先分组变成若干个子组,对每个子组分别插入排序,几次过后会得到一个基本有序的整组,对这个整组进行一次直接插入排序即可。

看图写代码:

img

void ShellSort(int a[],int n)
{
	int tmp,j;
	for(int d=n/2;d>0;d=d/2) //d为选择的步长,逐渐减小
	{
		for(int i=d;i<n;i++)
		{
			tmp=a[i]; //对相隔d个位置的子组用直接插入排序
			for(j=i-d;j>=0&&tmp<a[j];j=j-d)
			{
				a[j+d]=a[j]; //交换
			}
			a[j+d]=tmp;
		}
	}
}
原文地址:https://www.cnblogs.com/wangzheming35/p/13468171.html