C语言实现金块二分法查找
二分法是分治法的一种
将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
首先来初步认识一下二分法:
递归以及非递归方法
如果查找数组里面的某个数
首先确保数组是有序的
顺序(以升序数组为例)
1.确定数组的头尾,用标识记录(high,low)
从中间元素(mid)搜索是就返回
2.不是中间数就看要找的数比中间数大还是小
大(小)的话就在中间数的右(左)半部分找
high=mid+1(low=mid-1)重复1操作
3.直到找到数或者high>low结束
非递归查找
#include <stdio.h>
#include <stdlib.h>
//非递归算法
int Bin_Search(int *arr,int length,int find)
{
int first = 0,last = length-1,mid;
int sum = 0;
while(first <= last)
{
sum ++;
mid = (first + last)/2;//确定中间元素
if(arr[mid] > find) //寻找数在前面
{
last = mid-1;
}
else if(arr[mid] < find)//寻找数在后面
{
first = mid+1;
}
else //判断是否相等
{
printf("查找次数:%d\n",sum);
return</