希尔排序影响时间复杂度的因素是增量的改变,改变的幅度越大时间复杂度越少,具体Java代码实现如下所示:
public class HeerSort {
/**
* 希尔排序
*/
private void heerSort(int[] array){
//d为增量,调整增量的变化方式可以减少时间复杂度,本算法采取的是增量递减一的方法改变增量的值
int d=array.length/2;
while(true){
for (int i=0;i<d;i++){
for (int j=i;j+d<=array.length;j+=d){
for (int k=j+d;k+d<=array.length;k+=d){
if (array[j]>array[k]){
int temp=array[j];
array[j]=array[k];
array[k]=temp;
}
}
}
}
if (d==1){
break;
}
d--;
}
for (int arr:array) {
System.out.println(arr);
}
}
public static void main(String[] args){
HeerSort heerSort=new HeerSort();
int[] array=new int[]{49,38,44,2,0,7,28,1,-9,7,2,3,8,20,14,88,56,-8,-33,5,2,55,60};
heerSort.heerSort(array);
}
}