排序过程:取一个增量dk,将数组内所有间隔为dk的数字分成一组,在组内进行插入排序
减小dk,重复上述过程,直至dk等于1。
public void sorting() {
int dk=array.length/2;
while(dk>=1){
shellSorting(dk);
dk=dk/2;
}
}
public void shellSorting(int dk){
for(int i=0;i<dk;i++){
for(int j=i;j<array.length-dk;j+=dk){
if(array[j]>array[j+dk]){
for(int k=i;k<=j;k+=dk){
if(array[j+dk]<array[k]){
int temp=array[j+dk];
for(int m=j+dk;m>k;m-=dk){
array[m]=array[m-dk];
}
array[k]=temp;
break;
}
}
}
}
}
}
时间复杂度:平均O(n^1.3) 最好O(n) 最坏O(n^2) 不稳定
代码下载: