二分查找以及二分查找的变形

//二分查找:

#include <stdio.h>
int binsearch(int x, int v[], int n);
main()
{
  int i, result, n;
 int wait; 
  int x = 17; // 需要查找的数值
 int v[19]; // 定义一个数组
 // 给数组赋值
 for(i = 0; i < 20; ++i)
   v[i] = i;
 /**
 for(i = 0; i < 20; ++i)
 printf("%d \n", v[i]);
 */
 n = 20;
 result = binsearch(x, v, n);
 printf("%d", result);
 scanf("%d", &wait);
}
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;
 // 看看循环执行了多少次
 printf("mid = %d, low = %d, high = %d \n", mid, low, high);
 }
 return -1;
}
 

// 二分查找的变形:

#include<stdio.h>
int main(){
int bs(int a[],int size,int p);
 int i,n,result;
int p=11;
int size=20;
int a[19];
for(i=1;i<=20;i++)
a[i]=i;
result=bs
(a,size,p);    
printf("%d",result);    
return 0;        
}
int bs(int a[],int size,int p)
{int l=0;int r=size-1;
while(l<=r){
int mid=l+(r-l)/2;
if(p==a[mid])
return mid;
else if(p>a[mid])
l=mid+1;
else r=mid-1;    
printf("mid = %d,l= %d,r = %d\n",mid,l,r);
}

return -1;        
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值