用(循环)(和)(递归的)”折半法“查找数

来源:互联网 发布: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);   

}

}


0 0