基本思想:先将整个待排记录分成若干个子待排记录,分别将子待排进行直接插入排序,然后得到“基本有序”的整体记录,最后对整体记录进行一次直接插入排序,完成希尔排序。
图示:
代码:
ShellSort(int* p, int length)
{
int dalt = length / 2;//增量
while (dalt>=1) //增量终止条件
{
for (int i = dalt;dalt<length &&i < length; i++)//从位置dalt to length 去循环 看成是length-dalt个字串
{
int temp = p[i];
int j = i - dalt;
while (j>=0&&p[j]>temp)//找到temp插入的位置A
{
p[j+dalt] = p[j];
j = j - dalt;
}
p[j+dalt] = temp; //插入到A位置
}
dalt /= 2; //增量递减方式
}
}
结果: