常用函数

天大地大妈咪最大 提交于 2019-12-04 12:05:56

/*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,因此所有元素最终都会位于正确的位置上。
 
 
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!