C语言:递归和非递归实现二分查找

来源:互联网 发布:ucloud云计算校园招聘 编辑:程序博客网 时间:2024/05/16 09:37
二分查找是将有序数列不断地缩小,直到找到改元素或折半区域的首元素位置高于尾元素位置为止。
//递归写二分查找int BinarySearchD(int arr[], int x, int begin, int end){if (begin <= end){int mid = begin + ((end - begin) >> 1);if (arr[mid] == x){return mid;}else if (arr[mid] < x){return BinarySearchD(arr, x, mid + 1, end);}else if (arr[mid] > x){return BinarySearchD(arr, x, begin, mid - 1);}else{return -1;}}}


//非递归二分查找int BinarySearch(int arr[], int x,int begin,int end){while (begin <= end){int mid = begin + ((end - begin) >> 1);if (arr[mid] == x){return mid;}else if (arr[mid] < x){begin = mid + 1;}else if (arr[mid]>x){end = mid - 1;}else{return mid + 1; }}return 1;}

int main(){int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int len = sizeof(array) / sizeof(array[0]);int begin = 0;int end = len;printf("%d ", BinarySearch(array, 8, begin, end));printf("%d ", BinarySearchD(array, 8, begin, end));system("pause");return 0;}


0 0
原创粉丝点击