您的位置:首页 > 其它

高效排序算法(希尔排序)

2016-05-17 17:21 351 查看
static void shellSort(int[] data){

int sizeOfSeq=0; //分割的次数,即由步长所构成序列的长度,由以下动态求出

for(int h=1;h<data.length;h=3*h+1)

sizeOfSeq++;

int[] seq=new int[sizeOfSeq]; //步长数组,遵循seq[i+1]=3*seq[i]+1,经验最优序列

for(int i=0,h=1;i<seq.length;i++){

seq[i]=h;

h=3*h+1;

}

for(int i=seq.length-1;i>=0;i--){ //针对不同的步长

int step=seq[i];

for(int hCnt=0;hCnt<step;hCnt++){ //每个步长共需<步长>次

for(int j=hCnt+step,k;j<data.length;){ //针对每个步长的每一项,采用插入排序

int tmp=data[j];

k=j;

while(k-step>=0&&tmp<data[k-step]){

data[k]=data[k-step];

k-=step;

}

data[k]=tmp;

j+=step;

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: