用(循环)(和)(递归的)”折半法“查找数
来源:互联网 发布:python 驼峰转 编辑:程序博客网 时间:2024/05/20 00:37
题目:
从键盘读出10个按由大到小的顺序输入的数,存放在一个数组中, 然后输入一个数,要求用折半查找法找出该数是数组中第几个元素,如果该数不在数组中,打印出无此数。(请分别用循环和递归两种方法实现)
折半查找即从中间查找,如未找到,则将剩下的查找区域分成两半,根据查找的数值大小,选择在其中一半区域查找,重复上述查找过程,直到找到或者剩下区域无数据(未找到)。
//循环
#include <iostream>
using namespace std;
void find(int a[], int size, int aim);
int main()
{
const int size = 10;
int a[size] = { 0 };
cout << "由大到小输入数组中的十个数字"<<endl;
for (int i = 0;i < size;i++)
cin >> a[i];
cout << "输入你要查询的数字"<<endl;
int aim;
cin >> aim;
find(a, size, aim);
system("pause");
}
void find(int a[], int size, int aim)
{
int left = 0, right = size - 1; int mid;
for (;left <= right;)
{
mid = (left + right) / 2;
if (a[mid] == aim)
{
cout << "你要查找的是第" << mid + 1 << "个数字" << endl; return;
}
if (a[mid] < aim)
right = mid - 1;
if (a[mid] > aim)
left = mid + 1;
}
cout << "你要找的数不存在" << endl;
return;
}
//递归
#include <iostream>
using namespace std;
void find(int a[], int size, int aim,int left,int right);
int main()
{
const int size = 10;
int a[size] = { 0 };
int left = 0, right = size - 1;
cout << "由大到小输入数组中的十个数字"<<endl;
for (int i = 0;i < size;i++) cin >> a[i];
cout << "输入你要查询的数字"<<endl;
int aim;
cin >> aim;
find(a, size, aim,left,right);
system("pause");
}
void find(int a[], int size, int aim, int left, int right)
{
int mid; mid = (left + right) / 2;
if(left>right)
{
cout << "你要找的数不存在" << endl; return;
}
else
{
if (a[mid] == aim)
{
cout << "你要查找的是第" << mid + 1 << "个数字" << endl;
return;
}
if (a[mid] < aim)
find(a, size, aim, left, mid - 1);
if (a[mid] > aim)
find(a, size, aim, mid + 1, right);
}
}
- 用(循环)(和)(递归的)”折半法“查找数
- 折半查找法(递归)
- 折半查找和递归折半查找详解(二分法查找,递归二分法查找)
- 验证算法(递归的折半查找)
- 折半查找(递归方法)
- 二分查找的非递归程序(折半查找)
- 二分查找的递归算法(折半查找)
- 折半查找法的递归和非递归形式
- 顺序查找,折半查找(递归与非递归)
- 第十四周(项目一)--数据结构-递归的折半查找
- C++之二分查找/折半查找(非递归和递归两种方式)
- 第十三周 项目1 折半查找法(递归)
- 二分/折半查找(递归+非递归)
- 折半查找顺序表(递归与非递归)
- 折半查找(非递归与递归实现)
- 第十四周项目1线性表的折半查找(递归法)
- 递归的折半查找
- 第十四周项目1线性表的折半查找(循环法)
- Objective-c的基本特征:
- 工厂类
- C++primer_关联容器之map
- 信号量(Semaphore)
- Timer和TimeTask简介
- 用(循环)(和)(递归的)”折半法“查找数
- [Leetcode]Additive Number
- 子网和子网掩码分析
- Deep Learning + Opencv + 机器视觉
- 多态的理解(父类引用指向子类对象)
- javase-反射方法学习记录
- 蓝懿 iOS 技术交流和心得分享12.2
- 解释器模式(Interpreter Pattern)
- 单例模式--(懒汉式与饿汉式)