视频:
思想:其实就是缩小增量的思想在里面,
步骤:1定义一个增量int h =1,满足h
public static void Shell(int[] data)
{
while(h<data.length/3)
{
h=h*3+1;
}
while(h>0)
{
for(int index=h;index<data.length;index++)
{
int position=index;
int key=data[index];
while(position>0 && data[position-h]>key)
{
//元素后移
data[position]=data[position-h];
position-=h;
}
data[position]=key;
}
h=(h-1)/3;
}
}
注意:要理清逻辑,每次其实都是比较大的比较、
空间复杂度O(1),时间复杂度为O( n*1.25)到1.65*O(n*1.25)之间