前奏
希尔排序是内部算法,就是将一组无序数据按照一定规律逻辑拆分几小组每小组都会进行一次插入排序
思路
思路:
1:创建一个 循环每次循环算出指定有多少个小组及对应的步长
2:然后按照索引(步长)开始 该索引下对应的步长范围区域进行插入排序比较
课外仅供参考
如果与一组8000个数据的数组排序的情况下 时间差不多10毫秒不到
如果与一组80000个数据的数组排序的情况下 时间差不多20毫秒不到
如果与一组800000个数据的数组排序的情况下 时间差不多200毫秒不到
如果与一组8000000个数据的数组排序的情况下 时间差不多3秒不到
如果与一组80000000个数据的数组排序的情况下 时间差不多40秒不到
图解 1
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020032419550117.gif)
图解 2
注意:按照一定的步长规律进行数组之间的比较判断
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200324143001732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDY5ODg4Mg==,size_16,color_FFFFFF,t_70)
代码 提示:如果将从小到大顺序变成从大到小顺序,改对应的将> 改成<
public static void shellSortVersion3(int [] sort){
int stepLength=sort.length;
int insertValue;
int insertIndex;
while((stepLength/=2)>0){
for(int index=stepLength;index<sort.length;index++){
insertValue=sort[index];
insertIndex=index;
while((insertIndex-=stepLength)>=0&&insertValue<sort[insertIndex]){
sort[insertIndex+stepLength]=sort[insertIndex];
}
sort[insertIndex+stepLength]=insertValue;
}
}
}