您的位置:首页 > 其它

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

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

#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("不存在!");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: