s4 希尔排序
一:解题思路
Time:O(n^2/3),Space:O(1)
二:完整代码示例 (C++版和Java版)
C++:
template <typename T>
static void Shell(T array[],int len,bool min2max=true)
{
if(len==0) return;
int d=len;
do
{
d=d/3+1;
for(int i=d;i<len;i+=d)
{
int k=i;
T e=array[i];
for(int j=i-d;j>=0;j-=d)
{
if(min2max?(array[j]>e):(array[j]<e))
{
k=j;
array[j+d]=array[j];
}
else
{
break;
}
}
if(k!=i)
{
array[k]=e;
}
}
}while(d>1);
}
Java:
public void Shell(int[] array) { if(array==null || array.length==0) return; int len=array.length; int d=len; do { d=d/3+1; for(int i=1;i<len;i+=d) { int k=i; int e=array[i]; for(int j=i-d;j>=0;j-=d) { if(array[j]<e) { k=j; array[j+d]=array[j]; } } if(k!=i) { array[k]=e; } } }while(d>1); }

浙公网安备 33010602011771号