希尔排序是基于直接插入排序的。建议先看下前面的直接插入排序再来看希尔排序!
【基本思想】:把待排序的数据元素分成若干小组,对同一小组内的数据元素进行直接插入排序;小组的个数逐次减少;当完成了所有的数据元素都在一个小组内的排序后,排序过程结束。写入排序又称为缩小增量排序。
void ShellSort(DataType a[],int n, int d[],int numOfD)
{
int i,j,k,m,span;
DataType temp;
for(m = 0;m < numOfD;m++)
{
span = d[m];
for(k = 0; k < span; k++)
{
for(i = 0;i < n-1;i++)
{
temp = a[i+span];//定位第i+1位的数据,用于查找位置后的交换,避免移位时被覆盖
j = i; //用于第i+1位与前i位进行对比时的下标递减遍历。
while(j > -1 && temp.key < a[j].key)
{
a[j+span] = a[j];
j -= span;
}
a[j+span] = temp;
}
}
}
}