shell排序
排序过程:取一个增量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) 不稳定
代码下载: