希尔排序(Shell Sort)
1.1 算法描述
希尔排序是插入排序的升级版本,它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序,它的时间复杂度为O(n^1.3),空间复杂度为O(1),稳定性差。
1.2 动态图演示
我们先将整个数组分成多个子序列,然后在进行插入排序,他们之间的间隔在每次循环后减小,直到最后一次循环结束
1.3代码实现
void ShellSort(int* arr, int len)
{
//先给一个初始组间距,gap为1时即为直接插入排序
for (int gap = len/2; gap > 0; gap=/2) //不断缩小组间距,直到gap=1
{
for (int i = gap; i < len; i++)
{
int j = i;
int current = arr[i];
while(j - gap >= 0 && current < arr[j - gap])
{
arr[j] = arr[j - gap];
j = j - gap;
}
arr[j] = current;
}
}
}