希尔排序( 最坏O(N^2) )
重要概念:增量序列 增量
增量hk习惯于取len/2,然后递减hk=hk/2,直到等于1。
对于hk排序:下标为hk,hk+1,...,len-1 元素i,i放到i,i-hk, i-2hk...正确的位置上。
个人理解:也就是间隔hk排序,最后会进行间隔1排序,也就是全局排序。
//默认是升序
public void sort(int[]nums){
int len = nums.length;
//取hk=len/2
for(int hk = len/2;hk>0;hk/=2){
for(int i=hk;i<len;i++){
//从i开始,以hk的间隔往前遍历,找到nums[i]合适的位置插入
int cur = nums[i];
int j=i;
for(j=i;j>=hk;j-=hk){
if(cur<nums[j-hk])
nums[j]=nums[j-hk];
else
break;
}
nums[j]=cur;
}
}
}