第三章 流控制
对整型数组进行排序的Shell排序算法:
//Shell排序算法:先比较距离远的元素,而不是像简单交换排序那样先比较相邻的元素.
//被比较的元素之间的距离逐步减少为1,这时排序变成了相邻元素的互换.
void shellsort(int v[],int n)
{
int gap,i,j,temp;
gap=0;
i=0;
j=0;
temp=0;
for(gap=n/2;gap>0;gap/=2)
{
for(i=gap;i<n;i++)
{
for(j=i-gap;j>=0 && v[j]>v[j+gap];j-=gap)
{
temp=v[j];
v[j]=v[j+gap];
v[j+gap]=temp;
}
}
}
}
解释:最外层的 for 语句控制两个被比较元素之间的距离,从n/2开始,逐步进行对折,直到距离为0;中间层的for循环语句用于在元素间移动位置;最内层的for语句用于比较各对相距gap个位置的元素,当这两个元素逆序时把它们互换过来.