C语言实现 二分查找数组中的Key值(递归和非递归)
基本问题:使用二分查找的方式,对数组内的值进行匹配,如果成功,返回其下标,否则返回 -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; }
因为对算法这方面刚刚开始入门,欢迎拍砖。