c语言折半查找,C 语言折半查找的例子

有一个数组 v 已经按升序排列了,数组 v 有 n=20 个元素。数组中有个元素 x,如何知道 x 位于该数组的第几位呢?

解决这个问题的一个普遍方法是折半查找。下面是程序:

#include

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;

}

思路很简单:首先将输入值 x 与数组 v 的中间元素比较,如果 x 小于中间的元素,则将 high 值设为 中间元素-1,同理,若 x 大于中间元素,则将中间元素 + 1作为 low,再在low 与 high之间进行查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值