新手学习数据结构与算法---二分查找算法

来源:互联网 发布:淘宝网自助开通 编辑:程序博客网 时间:2024/05/17 02:48

上次写排序,查找的时候居然忘记的二分查找算法,今天就来实现,两种:递归与非递归

如果大家有什么建议,我一定多多学习!

//二分搜索算法(折半搜索算法) //时间复杂度:O(log2n) #include <iostream>//非递归算法---返回数组下标 template <typename T>int BinarySearch(T a[], const T & x, int n)      //数组a[],查找x这个元素,一共有n个元素{int left = 0,middle,right = n - 1;while(left <= right){middle = (left + right) / 2;if(a[middle] == x) return middle;else if(a[middle] > x)right = middle - 1;elseleft = middle + 1;}return -1;} //递归算法template <typename T>int BinarySearch(T a[], int x, int left, int right){if(left > right)               //递归出口           return -1;else{int middle = (left + right) / 2;if(a[middle] == x)return middle;else if(a[middle] > x)           //果断递归哈 return BinarySearch(a, x, left, middle - 1);         //才开始少了个return  elsereturn BinarySearch(a, x, middle + 1, right);}} int main(){using std::cin;using std::cout;using std::endl;int a[6] = {1, 3, 8, 9, 11, 15};int x;while(cin >> x){int i = BinarySearch(a, x, 0, 5);         //这是递归的 if(i != -1)cout << a[i] << endl;elsecout << "FAILED!" << endl; }return 0;}


 

 

原创粉丝点击