在无序集合的递归二分查找




使用递归实现对一个无序集合元素的二分查找,假设已经有一个排序函数,供你直接使用,所以你不需要自己实现一个排序函数,保证代码可读性、易于维护、有一定的健壮性。




#define  Len(a) ( (sizeof(a)) / (sizeof(a[0])) )

bool g_iUsort = true;  //标志位,未排序
int comp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;
}

bool getBisearch(int a[], int length, int value_find)
{
	if (a==NULL || length<=0)
		return false;
	if (g_iUsort) //进行一次排序
	{
		qsort(a, length, sizeof(int), comp); //调用库函数中的快速排序
		g_iUsort = false;
	}
	
	int start = 0, end = length-1;
	int mid = (start+end)/2;

	if (start<=end)
	{
		if (a[mid]>value_find)
			getBisearch(a, mid, value_find);
		else if (a[mid]<value_find)
			getBisearch(&a[mid+1], end-mid, value_find);
		else return true;
	}
	else
	{
		return false;
	}
}

void main()
{
	int a[] = {3,0,1,6,8}; //无序数组
	bool hasValue = false;
	hasValue = getBisearch(a, Len(a), 3);

	if (hasValue)
		puts("存在!");
	else puts("不存在!");

}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值