希尔排序的时间复杂度取决于步长d的选取,基本思路对步长为d的子序列进行插入排入排序,不断缩小d,直至1;
public class ShellSort {
public int[] shellSort(int[] A, int n) {
// write code here
for(int d = n/2; d>=1; d = d/2){
for(int i= d ; i<n ; i++){
if(A[i] <= A[i-d]){
int tmp = A[i];
int j;
for(j=i-d; j>=0 && tmp <= A[j];j=j-d){
A[j+d] = A[j];
}
A[j+d] = tmp;
}
}
}
return A;
}
}