Shell Sort based on insert sort

时间:2017-03-11 13:13:18   收藏:0   阅读:179

Reason:when it comes to insert sort,the snail appears,as it just moves forward step by step or even worse.So we need some improvement.the first idea may be that we can walk forward in big strides.Shell sort do the same thing.

the basic realization(forward):

public static void shellSort(Comparable[] a){
int len=a.length;
int stepLen=len/3;
boolean flag=true;
int index=0;
while(flag){
for(int i=0;i<stepLen;++i){
for(int j=i+stepLen;j<len;j+=stepLen){
//insert sort
for(int k=j;k>0;k-=stepLen){
if(less(a[k],a[k-stepLen])){
swap(a,k,k-stepLen);
}else{
break;
}
}
}
}
stepLen/=3;
//make sure the last step length is 1
if(stepLen==0){
if(index>0){
flag=false;
}
stepLen=1;
++index;
}
}
}

the update realization(reverse):

public static void updateShellSort(Comparable[] a){
int N=a.length;
int h=1;
while(h<N/3) h=3*h+1;
while( h >= 1){
for(int i=h;i<N;++i){
for(int j=i;j>=h && less(a[j],a[j-h]);j-=h){
swap(a,j,j-h);
}
}
h=h/3;
}
}

原文:http://www.cnblogs.com/ssMellon/p/6534575.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!