二分查找的实现和使用标准库函数实现二分查找
算法思想:1、将数组排序(从小到大);2、每次跟中间的数mid比较,如果相等可以直接返回,
如果比mid大则继续查找大的一边,否则继续查找小的一边。
输入:排序好的数组 - arrayname[],数组大小 - array_size,查找的值 - searchnumber
返回:找到返回其在数组中位置,否则返回-1
二分查找的代码实现
int binary_search(int arrayname[], intarray_size, int searchnumber)
{
intlow = 0, high = array_size - 1, mid;
while(low <= high)
{
mid= (low + high) / 2;//获取中间的位置
if(arrayname[mid] == searchnumber)
returnmid; //找到则返回相应的位置
if(arrayname[mid] > searchnumber)
high= mid - 1; //如果比key大,则往低的位置查找
else
low= mid + 1; //如果比key小,则往高的位置查找
}
return-1;
}
代码示例:
(1) 将未排序数组排序
(2) 二分查找想查找的数字
(3) 显示查找结果
#include
#include
using namespace std;
int binary_search1(int arrayname[], intarray_size, int searchnumber)
{
intlow = 0, high = array_size - 1, mid;
while(low <= high)
{
mid= (low + high) / 2;//获取中间的位置
if(arrayname[mid] == searchnumber)
returnmid; //找到则返回相应的位置
if(arrayname[mid] > searchnumber)
high= mid - 1; //如果比searchnumber大,则往低的位置查找
else
low= mid + 1; //如果比searchnumber小,则往高的位置查找
}
return-1;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0},i=0;
printf("未排序之前的数组里的每一个元素!\n");
for( i = 0 ; i < 10 ; i++ )
cout<
cout< sort(a,a+10); printf("排序之后的数组里的每一个元素!\n"); for( i = 0 ; i < 10 ; i++ ) cout<
//查找数组中存在的数字 i=binary_search1(a,10,5); if(i) { cout<<"要查找的数字在数组中的位置是"<
cout<<"该数字是"<
} else cout<<"没有该数字!"< //查找数组中不存在的数字 i=binary_search1(a,10,20); if(i>0) cout<
else cout<<"没有该数字!"< system("pause"); return 0; } 用标准库里的二分查找函数实现二分查找 #include #include using namespace std; int main() { int a[10]={9,6,3,8,5,2,7,4,1,0},i=0; printf("未排序之前的数组里的每一个元素!\n"); for( i = 0 ; i < 10 ; i++ ) cout<
cout< sort(a,a+10); printf("排序之后的数组里的每一个元素!\n"); for( i = 0 ; i < 10 ; i++ )