/*binsearch函数:在v[0]<=v[1]<=v[2]<=...<=v[n-1]中查找x*/
int binsearch(int x,int v[], int n)
{
int low, high, mid;
low = 0;
high = n-1;
while(low <= high)
{
mid = (low + high)/2;
if(x < v[mid])
high = mid -1;
else if(x > v[mid])
low = mid +1;
else /*找到了匹配值*/
return mid;
}
return -1; /*没有匹配值*/
}
该函数的基本判断是:在每一步判断x小于、大于还是等于中间元素v[mid]。
int binsearch(int x,int v[], int n)
{
int low, high, mid;
low = 0;
high = n-1;
while(low <= high)
{
mid = (low + high)/2;
if(x < v[mid])
high = mid -1;
else if(x > v[mid])
low = mid +1;
else /*找到了匹配值*/
return mid;
}
return -1; /*没有匹配值*/
}
该函数的基本判断是:在每一步判断x小于、大于还是等于中间元素v[mid]。
/*shellsort函数:按递增顺序对v[0]...v[n-1]进行排序*/
void shellsort(int v[], int n)
{
int gap, i, j, temp;
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循环语句。最外层的for语句控制两个被比较元素之间的距离,从n/2开始,逐步进行分析,直到距离为0.中间层的for循环语句用于在元素间移动位置。最内层的for语句用于比较各相距gap个位置的元素,当这两个元素逆序时把他们互换过来。由于gap的值最终要递减到1,因此所有元素最终都会位于正确的位置上。