您的位置:首页 > 编程语言 > C语言/C++

C语言实现 二分查找数组中的Key值(递归和非递归)

2014-03-20 09:01 573 查看
基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -1.请使用递归和非递归两种方法说明。

非递归代码如下:

#include <stdio.h>
int binsearch(int arr[], int len, int src)
{
int idx = 0,l = 0, r = len-1;
idx = (l + r)/2;
while(src != arr[idx])
{
if(src < arr[idx])
{
r = idx - 1;
}
else
{
l = idx + 1;
}
if(l > r)
{
idx = -1;
break;
}
idx = (l + r)/2;
}
return idx;
}
int main()
{
int arrar[12] = {1,3,4,6,7,8,9,20,100,101,200};
int len = 11;
int src;
int result;
scanf("%d", &src);
result = binsearch(arrar, len, src);
printf("Result : %d\n", result);
return 0;
}


递归代码如下:

#include <stdio.h>

int binsearch(int arr[], int l, int r, int src)
{
int result = 0;
int mid = (l + r)/2;
if (l < r){
if(src == arr[mid])
{result = mid;}
else if(src > arr[mid])
{result = binsearch(arr, mid + 1, r , src);}
else
{result = binsearch(arr,l ,mid - 1, src);}

}
else if (l == r)
{
result = (src == arr[l] ? l : -1);
}
else
{
result = -1;
}
return result;
}

int main()
{
int arra[10] = {1,6,9,19,20,30,100,400,1000,1001};
int len = 10;
int result, src;
printf("input a num: ");
scanf("%d" ,&src);
result = binsearch(arra, 0, len, src);
printf("Result: %d\n",result);
return 0;
}


因为对算法这方面刚刚开始入门,欢迎拍砖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: