二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。
二分法查找的思路如下:
(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
有什么不足希望大家不吝赐教