int d = length/2; //步长
while( d )
{
for(int i = 0 ; i d ; ++i) //根据步长分成组,对每组进行插入排序
{
//插入排序
for(int j = i+d; j length ; j +=d )
{
if( data[j] data[j -d])
{
int temp = data[j]; //哨兵
int k = j-d;
for(; k =0&& temp data[k]; k -=d)
{
data[k+d] =data[k];
}
data[k+d] =temp;
}
}
}
d = d/2;
}
}