维生素b12缺乏诊断:二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码
来源:百度文库 编辑:偶看新闻 时间:2024/05/03 02:01:53
折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
【基本思想】
将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果xa[n/2],则我们只要在数组a的右半部继续搜索x。
二分搜索法的应用极其广泛,而且它的思想易于理解。第一个二分搜索算法早在1946 年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的。
C++描述
Cpp代码- template
- int BinarySearch(Type a[],const Type& x,int n)
- {
- 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;
- }
- return -1;
- }
templateint BinarySearch(Type a[],const Type& x,int n){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;}return -1;}
递归实现(recuition)
Cpp代码- template
- int binary_search( Record * r, const int & low, const int & high, const Key & k )
- {
- int mid = (low + high)/2;
- if( low < high )
- {
- if( k <= r[mid] )
- binary_search( r, low, mid, k );
- else
- binary_search( r, mid+1, high, k );
- }
- else if( low == high )
- {
- if( k == r[mid] )
- return low;
- else
- return -1;
- }
- else
- return -1;
- }
templateint binary_search( Record * r, const int & low, const int & high, const Key & k ){int mid = (low + high)/2;if( low < high ){if( k <= r[mid] )binary_search( r, low, mid, k );elsebinary_search( r, mid+1, high, k );}else if( low == high ){if( k == r[mid] )return low;elsereturn -1;}elsereturn -1;}
迭代实现(iteration)
Cpp代码- template
- int binary_search( Record * r, const int & size, const Key & k )
- {
- int low=0, high=size-1, mid;
- while( low < high )
- {
- mid = (low + high) / 2;
- if( k > r[mid] )
- low = mid + 1;
- else
- high = mid;
- }
- if( low > high )
- return -1;
- else
- {
- if( k == r[low] )
- return low;
- else
- return -1;
- }
- }
解释二分查找算法^_^
折半查找
二分查找法的具体算法
用递归算法实现1-N中任全R个数
什么是折半查找法
折半查找问题
顺序查找和折半查找
顺序查找和折半查找
如何用C++程序设计实现二分查找与分块查找算法的比较
递归算法:它主要用途!
汉诺塔递归算法 prolog
哪个朋友帮忙弄个程序设计,题目"二分查找与分块查找算法的比较"
对照递归算法和非递归算法的优缺点。
所有用递归算法的能不能都用非递归算法实现?
ack问题非递归算法
谁有八皇后非递归算法?
递归算法》》调车头问题
我想问问什么是递归算法??
求一段asp实现的折半查找法
数据结构:递归求单链表得长度算法
一个递归算法的实现问题
程序员面试遇到的递归算法题
C语言汉诺塔 非递归算法
求汉诺塔C递归算法详细解答