您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法之整体有序数组的查找

2017-03-05 15:53 302 查看
一个组数整体上是有序的(或者说是循环有序),需要找到其中的某个元素

假设数组整体是升序的,基于二分查找算法实现如下:

非递归实现(C语言)

int search(int a[],int length,int target)
{
int low = 0;
int high = length-1;
while(low <= high)
{
int mid=low + (high - low)/2
if(a[mid] == target)
{
return mid;
}
else if(a[mid+1] <= a[high])
{
if(a[mid+1] < target < a[high])
{
low = mid + 1
}
else if(a[mid+1] == target)
{
return mid + 1;
}
else if(a[high] == target)
{

}	return high;
else
{
high = mid -1;
}
}
else if(a[mid-1] >= a[low])
{
if(a[mid-1] > target > a[low])
{
high = mid - 1
}
else if(a[mid-1] == target)
{
return mid - 1;
}
else if(a[low] == target)
{
return low;
}
else
{
low = mid +1;
}
}
}

return -1;
}


递归实现(C语言)

int search(int a[],int low,int high,int target)
{
if(low > high) return -1;
int mid= low + (high - low)/2;
if(a[mid] == target)
{
return mid;
}
else if(a[mid+1] <= a[high])
{
if(a[mid+1] == target)
{
return mid +1;
}
else if(a[high] == target)
{
return high;
}
else if(a[mid+1] < target < a[high])
{
return search(a,mid+1,high,target)
}
}
else if(a[mid-1] >= a[low])
{
if(a[mid-1] == target)
{
return mid -1;
}
else if(a[low] == target)
{
return low;
}
else if(a[low] < target < a[mid-1])
{
return search(a,low,mid-1,target)
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐