編程成長日記——折半查找

編寫一個折半查找函數數組

#include<stdio.h>
//編寫折半查找函數

int binsearch(int a,int num[],int b )
{
	int left=0,right=b-1,mid=0;	
	while(left<=right)
	{   
		int mid=(left+right)/2; 
		if (num[mid]<a)
		{
			left=mid+1;
		}
		else if (num[mid]==a)
		{
			return mid;
		}
		else
		{
			right=mid-1;
		}
	}
	return -1;
}
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int key = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	printf("請輸入你想找的數字:\n");
	scanf("%d", &key);
	int ret = binsearch(key, arr, sz);
	if (ret == -1)
	{
		printf("不存在!\n");
	}
	else
	{
		printf("%d在數組中爲arr[%d]\n", key,ret);
	}

	return 0;
}

在這個代碼中最重要的是理解折半查找的含義,分析每次循環的條件判斷,當key>mid時,安全

left應該右移一次;檔key<mid時,right應該左移一次;還有須要注意的是,用mid=left+right的方法並非很安全,有可能會溢出,另外,折半查找只適用於一個有序的數組中查找具體的數字。ide

注意在選擇right的值時,若是right=size,則下面的while循環應該改成while(left<right),當所要查找的數據小於mid時,right=mid,而不是right=mid-1;函數

相關文章
相關標籤/搜索