二分查找算法
二分查找算法也稱爲折半查找法,它的思想是每次都與序列的中間元素比較。二分查找的一個前提條件是數組是有序的,假設數組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;
}