常用函数

/*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]。
 
/*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,因此所有元素最终都会位于正确的位置上。
 
 
 
原文地址:https://www.cnblogs.com/TheFly/p/11862977.html