Shell Sort based on insert sort
Posted 空山皓月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell Sort based on insert sort相关的知识,希望对你有一定的参考价值。
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;
}
}
以上是关于Shell Sort based on insert sort的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 451. Sort Characters By Frequency JAVA语言
Spark-1.6.0中的Sort Based Shuffle源码解读