二分法查找数组中的某一个数并指出其位置

二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。

二分法查找的思路如下:

(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

(3)如果某一步数组为空,则表示找不到目标元素。

二分法查找的时间复杂度O(logn)。且二分法必须在已排好序的序列中查找,杂乱的序列是无法使用二分查找的

法一:非递归法

#include
using namespace std;

void line(int [], int);//冒泡排序
int find(int, int [], int);//二分法查找
int main(){
	
	int a[] = {13,2,4,7,9,123,456,5,8,12,66,8,99,34,3,11,22};//设定一个无序数组,作为初始数组
	int n = sizeof(a)/sizeof(int);
	cout<<"数组长度为"<>num;
	int i = find(num,a,n);//调用二分法查找函数 
		if (i == -1)
		{
			cout<<"未找到你输入的数字。"<a[j+1])
			{
				t = a[j];//交换 
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	cout<<"升序排序后的数组a[]={";
	for (i=0; i

法二:递归算法

#include
using namespace std;

void line(int [], int);//冒泡排序
int find(int, int [],int, int);//二分法查找
int main(){
	
	int a[] = {13,2,4,7,9,123,456,5,8,12,66,8,99,34,3,11,22};//设定一个无序数组,作为初始数组
	int n = sizeof(a)/sizeof(int);
	cout<<"数组长度为"<>num;
	int i = find(num,a,0,n-1);//调用二分法查找函数 
		if (i == -1)
		{
			cout<<"未找到你输入的数字。"<a[j+1])
			{
				t = a[j];//交换 
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	cout<<"升序排序后的数组a[]={";
	for (i=0; i

有什么不足希望大家不吝赐教

你可能感兴趣的:(算法,算法,数据结构)