int dlta[]={4,3,2,1}; //增量序列
void shellInsert(int* a, int n,int delta)
{
cout<<"the delta is "<<delta<<endl;
int temp;
for(int i=0;i<n-delta;i++) //每个piece的起始
{
for(int j=i+delta;j<n;j+=delta) // 外层循环
{
//如果当前元素比前一个元素小,则要在前面的序列中寻找合适的位置将其插入
//否则就放在那里什么也不做
if(a[j]<a[j-delta])
{
temp=a[j]; //当前要移动的元素保护起来,复制为哨兵,寻找合适的插入位置
a[j]=a[j-delta];//后移
//移动
int k=0;
for(k=j-2*delta;a[k]>a[j];k-=delta)
{
a[k+delta]=a[k];//后移
}
//此时的a[k]比a[j]小,因此要插入在a[k]后面的那个位置,即a[k+delta]
a[k+delta]=temp;//找到了合适的插入位置,插入
}//else 说明a[j]比前一个元素小,则啥也不做
}
}// 外层循环
}
bool shellsort(int* a,int n)
{
for(int i=0;i<4;i++)
shellInsert(a,n,dlta[i]);
return true;
}
shell排序
最新推荐文章于 2013-12-19 16:48:07 发布