代码如下:
@Test
public void shellSort(){
int []a={22,15,32,14,11,10,5,-33,-2,1000,1222,1235};
long t1=System.currentTimeMillis();
for(int gap=(a.length+1)/2;;){//分组
for(int i=0;i<a.length-gap;i++){//用越有序越有利的排序算法(基本排序算法)进行组内排序
for(int j=0;j<a.length-gap;j+=gap){//为便于大家理解shell排序算法,这里用冒泡进行组内排序
if(a[j]>a[j+gap]){
swap(a,j,j+gap);
}
}
}
if(gap>1){
gap=(gap+1)/2;
}else{
break;
}
}
long t2=System.currentTimeMillis();
System.out.println(t2+","+t1);
print(a);
}
@Test
public void shellSort2(){
int []a={22,15,32,14,11,10,5,-33,-2,1000,1222,1235};
long t1=System.currentTimeMillis();
for(int gap=(a.length+1)/2;;){//分组
for(int i=0;i<a.length-gap;i++){//用越有序越有利的排序算法(基本排序算法)进行组内排序
int temp=a[i+1];
int j=i;
for(j=0;j<a.length-gap;j+=gap){//插入排序
if(a[j]>a[j+gap]){
a[j+gap]=a[j];
j--;
if(j<0){
break;
}
}
}
a[j+1]=temp;
}
if(gap>1){
gap=(gap+1)/2;
}else{
break;
}
}
long t2=System.currentTimeMillis();
System.out.println(t2+","+t1);
print(a);
}
}