严格的二分查找算法,返回第一个相等的数,而不是返回任意一个相等的

int index(int * arry, int count, int val)
{
 int start , mid, end;
 start = 0; end = count - 1;
 int ret  = -1;
 while( start <= end )
 {
  mid = (start + end)/2;
  if(val > arry[mid] )
  {
   start = mid + 1;
  }else if(val < arry[mid])
  {
   end = mid - 1;
  }else
  {
   ret = mid;
   break;
  }
 }

 if(ret == -1)
  return ret;

 while(mid > start)//在所有相等的数中寻找最靠前的那个数的索引返回
 {
  if(arry[(start + mid)/2] != arry[mid])
   start = ((start + mid)/2 + mid + 1)/2;
  else
   mid = (start + mid)/2;
 }
 return mid;
}


版权声明:本文为wangxugangzy05原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。