1.希尔排序是在插入排序的基础上进行的改进的算法(缩小增量排序)
2.基本思想:
先将排序表分割成,形如L[i,i+d,i+2d…i+kd]的特殊子表,再分别进行插入排序,当整个表中的元素呈现“基本有序”,最后再对整体进行依次直接插入排序。
3.如何决定排序的步长
希尔说: d1=[n/2] n:代表表长
d(i+1)=d(i)/2;
最后一个d(k)=1;
4.例子
5.希尔排序的算法描述
for(i=d+1;i<=n;i++) //i=d+1 代表第一个序列的第二个数据的下标,将r[i]插入到各自所属的序列中
{r[0]=r[i];//暂存插入的记录
j=i-d;//j指向所属序列的最后一个记录
while(j>0&&r[0]<r[j])
{r[j+d]=r[j];//记录后移d个位置
j=j-d;//比较同一子序列的前一个记录
}
r[j+d]=r[0];
}
6.希尔排序的时间性能
时间复杂度在O(n²~nlog2 n)
希尔排序是不稳定的算法