二分查找实现与算法分析

来源:互联网 发布:柏林 韩国电影 知乎 编辑:程序博客网 时间:2024/06/05 11:21

二分查找又名折半查找。找到中间值与要找的数值进行比较,不过的缩小查找空间。这里我们用递归与非递归分别实现,并分析空间复杂度与时间复杂度

//二分查找递归算法//时间复杂度    O(lg N)//空间复杂度    O(1g N)#include<iostream>using namespace std;int Binary(int* arr, int data, size_t size, int left, int right){if (left <= right)//区间[]左闭右闭{int mid = left + ((right - left) >> 1);if (arr[mid] == data){return mid;}if (arr[mid]<data){left = mid + 1;size = size - left;return Binary(arr, data, size, left, right);}if (arr[mid]>data){right = mid - 1;size = right + 1;return Binary(arr, data, size, left, right);}}cout << "not find" << endl;return -1;}int main(){int arr[9] = { 10,23,24,56,87,99,105,123,999};cout << Binary(arr, 123, 9, 0, 8) << endl;return 0;}



在复杂度的时候也可把O(log2 N)=O(lg N)

//二分查找非递归算法//时间复杂度:O(lg N)//空间复杂度:O(l)#include<iostream>using namespace std;int Binary(int* arr, int data, size_t size, int left, int right){while (left < right){int mid = left + ((right - left) >> 1);if (arr[mid] == data){return mid;}if (arr[mid] < data){left = mid + 1;}if (arr[mid] > data){right = mid;}}return -1;}int main(){int arr[10] = { 5,10, 23, 24, 56, 87, 99, 105, 123, 999 };cout << Binary(arr, 24, 10, 0, 9) << endl;return 0;}


0 0