标签:size dep 完全 div clu 不难 eof span scanf
书上习题有要求用递归和迭代实现一个二分查找算法,随即写了一个,但对于找不到的部分没怎么处理...感觉不是很好处理。
示例代码:
#include<stdio.h> int binarySearch(int nums[], int left, int right, int X) //迭代法 { int mid; mid = (left + right) / 2; while(X != nums[mid]) { if(X > mid) mid = (mid + right) / 2; else mid = (left + mid) / 2; } return nums[mid]; } void main() { int arr[] = {1, 2, 3, 4, 5, 6}, arrSize; int X; arrSize = sizeof(arr)/sizeof(int); scanf("%d", &X); printf("%d\n", binarySearch(arr, 0, arrSize, X)); }
//感觉好像没什么可说的,毕竟不难 #include<stdio.h> int BinarySearch(int nums[], int numsFirst, int numsSize, int X) { int numsMid; numsMid = (numsFirst + numsSize)/2; if(X < nums[numsMid]) return BinarySearch(nums, numsFirst, numsMid, X); else if(X > nums[numsMid]) return BinarySearch(nums, numsMid, numsSize, X); else return nums[numsMid]; } void main() { int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int numsSize; numsSize = sizeof(num)/sizeof(int); printf("%d\n", BinarySearch(num, 0, numsSize, 7)); }
因为二分查找算法思想就像一颗完全二叉树,深度depth = lg(n)+1,n为问题规模,递归子问题为2,因此以上两段代码的时间复杂度都为O(lgn)。
标签:size dep 完全 div clu 不难 eof span scanf
原文地址:http://www.cnblogs.com/darkchii/p/7493801.html