简介:
希尔排序又称为缩小增量排序,是基于插入排序上进行的优化后的排序,是一种非稳定排序
希尔排序是把序列按一定间隔分组,对每组使用直接插入排序;随着间隔减小,一直到1,使得整个序列有序。
步骤:
1:先用一个增量将待排序的数组分为若干个子数组,每个子数组中的下标间距就是增量值
2:然后对每个子数组进行插入排序
3:再用第二个增量进行相同操作
(与插入排序类似,多了个增量)
注意事项:
1: 增量元素最好互质,如果不互质,可能会导致小的增量起不到效果
2: 最后一个增量必须为1
代码:
void ShellSort(int *a,int len)
{
int h = 1; //h为增量
while (h < len / 3 )
{
h = h * 3 + 1; //给增一个初始的值
}
while (h >= 1)
{
for (int i = h; i < len; i++)
{
int temp = a[i];
int j = i - h;
while (j >= 0 && a[j]>temp)
{
a[j + h] = a[j];
j -= h;
len2++;
}
a[j + h] = temp;
}
h /= 3;
}
}
时间复杂度:
最好情况:O(nlogn)
最坏情况:O(n^2)