c++二分查找实现(非递归和递归方式)
来源:互联网 发布:海康录像机设备域名 编辑:程序博客网 时间:2024/05/16 06:20
我自己的代码如下:
int erfen1(int a[],int key, int l, int r)
{
if (a == NULL || l > r)
return -1;
int mid = l + ((r - l) >> 1);
if (a[mid] == key)
return mid;
if (a[mid] > key)
{
return erfen1(a, key, l, mid - 1);
}
if (a[mid] < key)
{
return erfen1(a, key, mid+1, r);
}
}
int erfen2(int a[], int key, int l, int r)
{
if (a == NULL || l > r)
return -1;
while (l<=r)
{
int mid = l + ((r - l) >> 1);
if (a[mid] == key)
return mid;
if (a[mid]>key)
{
r = mid - 1;
}
if (a[mid] < key)
{
l = mid + 1;
}
}
return -1;
}
下面是别人的代码:
c++二分查找实现(非递归和递归方式)
大学学数据结构时侯学的算法,现在复习一下:
- #include <iostream>
- using namespace std;
- /*
- *二分查找思想:1、数组从小到大排序;2、查找的key每次和中间数比较,如果key小于mid
- 查找mid左侧的数组部分;如果key大于mid,则查找mid右侧的数组部分;如果相等,则直接返回mid。
- 输入:排序数组-array,数组大小-aSize,查找值-key
- 返回:返回数组中的相应位置,否则返回-1
- */
- //非递归查找
- int BinarySearch(int *array, int aSize, int key)
- {
- if ( array == NULL || aSize == 0 )
- return -1;
- int low = 0;
- int high = aSize - 1;
- int mid = 0;
- while ( low <= high )
- {
- mid = (low + high )/2;
- if ( array[mid] < key)
- low = mid + 1;
- else if ( array[mid] > key )
- high = mid - 1;
- else
- return mid;
- }
- return -1;
- }
- //递归
- int BinarySearchRecursive(int *array, int low, int high, int key)
- {
- if ( low > high )
- return -1;
- int mid = ( low + high )/2;
- if ( array[mid] == key )
- return mid;
- else if ( array[mid] < key )
- return BinarySearchRecursive(array, mid+1, high, key);
- else
- return BinarySearchRecursive(array, low, mid-1, key);
- }
- int main()
- {
- int array[10];
- for (int i=0; i<10; i++)
- array[i] = i;
- cout<<"No recursive:"<<endl;
- cout<<"position:"<<BinarySearch(array, 10, 6)<<endl;
- cout<<"recursive:"<<endl;
- cout<<"position:"<<BinarySearchRecursive(array, 0, 9, 6)<<endl;
- return 0;
- }
阅读全文
0 0
- c++二分查找实现(非递归和递归方式)
- c++二分查找实现(非递归和递归方式)
- 二分查找算法递归和非递归实现(C++)
- C语言:递归和非递归实现二分查找
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 二分查找递归和非递归实现
- 递归和非递归实现二分查找
- 二分查找(非递归实现和递归实现)
- 二分查找递归和非递归(java实现)
- 二分查找法(递归和非递归实现)
- Java(二分查找算法实现,分别使用递归和非递归方式)
- 二分查找递归和非递归实现(c语言实现)
- 二分查找(递归和非递归)
- (一)算法--查找算法顺序查找和二分查找(递归和非递归方式)
- 二分查找的递归/非递归方式C++实现
- 二分查找的两种实现方式(递归和非递归)--python实现
- Hibernate搭建开发环境+简单实例(二)
- c++ 合并两个无序的单链表使其仍为无序
- 笔记
- 文章标题
- Python 函数修饰符(装饰器)的学习
- c++二分查找实现(非递归和递归方式)
- pcl点云处理基本步骤
- leetcode题记——Two Sum
- 1057数零壹(进制转换)
- MySQL中join详解
- MySQL 锁机制常用知识点有哪些?
- Flex布局实现圣杯布局和网格布局
- webmagic爬取腾讯nba数据
- Scrapy学习笔记(1)初探Scrapy