二分查找算法
二分查找算法也称为折半查找法,它的思想是每次都与序列的中间元素比较。二分查找的一个前提条件是数组是有序的,假设数组array为递增序列,findData为要查找的数,n为数组长度,首先将n个元素分成个数大致相同的两半,取array[n/2]与将要查找的值findData进行比较,如果相等,则找到了,算法终止;如果findData<array[n/2],在数组的左半部分进行查找,相反则在右半部分进行查找。
二分查找算法分为递归和非递归方法解决
示例代码:
#include <stdio.h>
//非递归算法,如果存在返回数组位置,不存在返回-1
int BinarySearch(int array[],int len,int findData)
{
if(array == NULL || len <= 0)
{
return -1;
}
int start = 0;
int end = len-1;
while(start < end)
{
int mid = start + (end - start) / 2;
if(array[mid] == findData)
{
return mid;
}
else if(array[mid] < findData)
{
start = mid + 1;
}
else
{
end = mid -1;
}
}
return -1;
}
//递归算法
int BinarySearchRecursion(int array[],int findData,int start,int end)
{
if(start < end)
{
return -1;
}
int mid = start + (end - start) / 2;
if(array[mid] == findData)
{
return mid;
}
else if(findData < array[mid])
{
return BinarySearchRecursion(array,findData,start,mid-1);
}
else
{
return BinarySearchRecursion(array,findData,mid+1,end);
}
}
int BinarySearchRecursion(int array[],int len,int findData)
{
if(array == NULL || len <= 0)
{
return -1;
}
BinarySearchRecursion(array,findData,0,len-1);
}
int main()
{
int array[] = {1,2,3,4,5,6,7,8};
int len = sizeof(array) / sizeof(array[0]);
int index = BinarySearch(array,len,4);
int index2 = BinarySearchRecursion(array,len,9);
printf("%d\n%d\n",index,index2);
return 0;
}