[數組]二分查找算法

二分查找算法

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章