分治策略之二分搜索技术
2012-06-02 12:30
204 查看
问题描述:
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。
算法复杂度分析:
每执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn)
次。循环体内运算需要O(1)
时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)
。
给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。
算法复杂度分析:
每执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn)
次。循环体内运算需要O(1)
时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)
。
//二分搜索技术(分治) #include <iostream> using namespace std; template <typename Type> int BinarySearch(Type a[], const Type &x, int n) { //在a[0]<=a[1]<=...<=a[n-1]中搜索x //找到x时返回其在数组中的位置,否则返回-1 int left = 0; int right = n-1; while(left <= right) { int middle = (left+right)/2; if(x == a[middle]) { return middle; } if(x > a[middle]) { left = middle+1; } else { right = middle-1; } } //未找到x return -1; } int main() { int n; cout<<"输入数组的大小n:"<<endl; cin>>n; int *a = new int ; cout<<"输入数组中的数据:"<<endl; for(int i = 0; i < n; i++) { cin>>a[i]; } int obj_num; cout<<"输入所要找的数:"<<endl; cin>>obj_num; int flag = BinarySearch(a,obj_num,n); if(-1 == flag) { cout<<"未找到obj_num"<<endl; } else { cout<<"找到obj_num,其在数组中的下标为:"<<flag<<endl<<"是第"<<flag+1<<"个数"<<endl; } delete a; return 0; }
相关文章推荐
- 第2章 递归与分治策略,二分搜索技术(查找不成功时,返回区间位置)
- 递归和分治策略之二分搜索法
- 分治思想 - 二分搜索技术 - MATLAB代码 list是数据集合,x是要查找的数据。
- 递归与分治策略之二分搜索(Java版本)
- 【计算机算法分析】递归与分治策略——二分搜索与集合划分问题
- 2.1 二分搜索技术
- 递归与分治策略之二分搜索算法
- 模板:二分搜索技术
- 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第5章 树搜索策略
- 二分搜索(BinarySearch)的分治思想C语言实现
- hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)
- 分治搜索(二分,三分)
- 分治-二分搜索
- 二分搜索(分治)
- 实验一 分治与递归―二分搜索 java实现
- 修改程序清单8.4中的猜测程序,使其使用更智能的猜测策略。使用二分搜索策略。
- 二分搜索技术
- 二分搜索(分治递归)
- 算法实现(3)二分搜索技术
- NOYJ 疯牛 二分搜索 贪心策略