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; }
因为对算法这方面刚刚开始入门,欢迎拍砖。
相关文章推荐
- 【二分查找】用C语言实现一个有序数组的二分查找
- C语言数据结构中二分查找递归非递归实现并分析
- 二分查找的递归和非递归算法(C语言实现)
- c++实现二分查找 递归和非递归
- 二分查找递归和非递归(java实现)
- c语言利用递归实现二分查找
- 旋转数组查找, 二分查找的递归于非递归实现
- c语言简单递归/非递归实现二分查找
- C 二分查找 递归与非递归的实现代码
- 二分查找的两种实现方式(递归和非递归)--python实现
- C语言:递归和非递归实现二分查找
- Java实现数组二分查找及递归二分查找
- C语言实现数组二分查找与顺序查找
- 使用c语言指针和递归方法实现二分查找
- C语言 ---- 递归实现二分查找
- 算法2,用递归的模式实现二分查找
- 二分查找递归非递归实现并分析
- 二分查找递归和非递归
- 二分查找 递归与非递归 编程之美写法
- 二叉搜索树(BST)递归与非递归的插入、删除、查找的实现