两种二分查找方式(迭代和递归),今天又被广数鄙视了,唉
2011-03-08 16:06
417 查看
#include <iostream>
using namespace std;
int binary_search(int str[], int n, int v)
{
int left = 0;
int right = n - 1;
int middle;
while (left <= right)
{
middle = (left + right)/2;
if (str[middle] > v)
{
right = middle - 1;
}
else if (str[middle] < v)
{
left = middle + 1;
}
else
return middle;
}
return -1;
}
int recursiveBinarySearch(int str[], int left, int right, int v)
{
if (left < right)
{
int middle = (left + right)/2;
if (str[middle] > v)
{
return recursiveBinarySearch(str, left, middle - 1, v);
}
else if (str[middle] < v)
{
return recursiveBinarySearch(str, middle + 1, right, v);
}
else
return middle;
}
else if (left == right)
{
if (str[left] == v)
{
return left;
}
else
return -1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int str[10] = {1, 3, 23, 34, 45, 65, 454, 555, 666, 2323};
printf("find 34 by recursiveBinarySearch: %d/n", recursiveBinarySearch(str, 0, 9, 343));
getchar();
return 0;
}
using namespace std;
int binary_search(int str[], int n, int v)
{
int left = 0;
int right = n - 1;
int middle;
while (left <= right)
{
middle = (left + right)/2;
if (str[middle] > v)
{
right = middle - 1;
}
else if (str[middle] < v)
{
left = middle + 1;
}
else
return middle;
}
return -1;
}
int recursiveBinarySearch(int str[], int left, int right, int v)
{
if (left < right)
{
int middle = (left + right)/2;
if (str[middle] > v)
{
return recursiveBinarySearch(str, left, middle - 1, v);
}
else if (str[middle] < v)
{
return recursiveBinarySearch(str, middle + 1, right, v);
}
else
return middle;
}
else if (left == right)
{
if (str[left] == v)
{
return left;
}
else
return -1;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int str[10] = {1, 3, 23, 34, 45, 65, 454, 555, 666, 2323};
printf("find 34 by recursiveBinarySearch: %d/n", recursiveBinarySearch(str, 0, 9, 343));
getchar();
return 0;
}
相关文章推荐
- 斐波那契数列的两种实现方式(递归(大于O(n方))和迭代(O(n))----网易笔试2013录
- 请用递归和迭代两种方式输出文件目录结构
- 层次遍历的两种方式:递归与迭代
- 斐波那契数的两种实现方式———1.递归实现,2迭代实现
- 斐波那契数列的两种实现方式(递归(大于O(n方))和迭代(O(n))----网易笔试2013录
- 递归和迭代两种方式实现归并排序(Java版)
- [转]在计算机程序中,完成重复的任务有两种方式:递归和迭代(循环)。
- map两种迭代方式的比较
- 递归和循环两种方式实现未知维度集合的笛卡尔积
- 用递归和非递归两种方式找出所有排列
- 算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现
- java中Map的两种不同遍历、迭代方式及比较
- 链表翻转的图文讲解(递归与迭代两种实现)
- 递归 / 迭代两种方法实现查找指定目录下所有文件
- JAVA:递归和迭代两种方法计算斐波那契数列
- 【剑指offer】递归循环两种方式反转链表
- 汇编语言--运用迭代和递归的方式按照要求输出
- C++之二分查找/折半查找(非递归和递归两种方式)
- 斐波那契数列的两种解题思路:递归VS迭代
- java实现二分查找(迭代与递归)