蓝莲花 伴奏:求希尔排序法的C++代码

来源:百度文库 编辑:神马品牌网 时间:2024/05/09 02:18:57
最好能加上注释

//(2)希尔排序
void ShellInsert(int array[],long dk,long n)
{
int sentinel; //哨兵
for(long i=dk;i<n;i++){

if(array[i]<array[i-dk]){
sentinel=array[i];
for(long j=i-dk;(j>=0)&&(sentinel<array[j]);j-=dk)
array[j+dk]=array[j];
array[j+dk]=sentinel; //
}
}
return;
}

void ShellSort(int array[],long n,long t) //for(int i=0;i<t;i++)cout<<dlta[i]<<" ";cout<<endl;
{
long *dlta=new long[t];
if(t>0)dlta[0]=1;
long temp=1;
for(long i=1;i<t;i++){
dlta[i]=temp+1;
temp*=2;
}

for(i=t-1;i>=0;i--){
ShellInsert(array,dlta[i],n); //dlta=...9,5,3,2,1也可以预先用一数组存放好这个数列!
}

delete []dlta;

return;
}
//endl of ShellSort

希望能给我分啦~