二分查找,递归与非递归实现
2015-09-08 08:56
465 查看
每次经理带我去面试别人,都会问一个二分查找的算法,我用惯了STL的算法,对于这些算法怎么实现,很少关注,但是他老是问这个。。。我就好奇了,反正闲来无事,看看怎么写吧。
#include <iostream>
using namespace std;
int digui_search(int arr[], int start , int end, int key){
if (start >= end)
return -1;
int mid = (start + end) / 2;
if (arr[mid] == key)
return mid;
if (arr[mid] < key)
return search(a, mid + 1, end, key);
else
return search(a, start, mid - 1, key);
}
int diedai_search(int arr[], int start, int end, int key){
while (start <= end){
int mid = (start + end) / 2;
if (arr[mid] == key)
return mid;
else{
if (arr[mid] > key)
end = mid - 1;
else
start = mid + 1;
}
}
return - 1;
}
int main()
{
int arr[5] = { 3, 8, 11, 22, 33 };
cout << digui_search(arr, 0, 4, 22) << endl;
cout << diedai_search(arr, 0, 4, 8) << endl;
return 0;
}
#include <iostream>
using namespace std;
int digui_search(int arr[], int start , int end, int key){
if (start >= end)
return -1;
int mid = (start + end) / 2;
if (arr[mid] == key)
return mid;
if (arr[mid] < key)
return search(a, mid + 1, end, key);
else
return search(a, start, mid - 1, key);
}
int diedai_search(int arr[], int start, int end, int key){
while (start <= end){
int mid = (start + end) / 2;
if (arr[mid] == key)
return mid;
else{
if (arr[mid] > key)
end = mid - 1;
else
start = mid + 1;
}
}
return - 1;
}
int main()
{
int arr[5] = { 3, 8, 11, 22, 33 };
cout << digui_search(arr, 0, 4, 22) << endl;
cout << diedai_search(arr, 0, 4, 8) << endl;
return 0;
}
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#中的递归APS和CPS模式详解
- C#冒泡法排序算法实例分析
- WinForm实现按名称递归查找控件的方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- C#中的尾递归与Continuation详解
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- C++二分查找在搜索引擎多文档求交的应用分析
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法