您的位置:首页 > 其它

Search Insert Position

2015-06-18 15:19 141 查看

Search Insert Position

递归实现二分搜索。将基本情况写下来,在写出递归式,总觉得代码又长又臭

int searchInsert(int* nums, int numsSize, int target)
{
if(nums==NULL||target<*nums)
return 0;
if(target>*(nums+numsSize-1))
return numsSize;
if(target==*(nums+numsSize/2))
return numsSize/2;
else
{
if(numsSize%2==0)
{
if(target>*(nums+numsSize/2))
return numsSize/2+1+searchInsert(nums+numsSize/2+1,(numsSize-1)/2,target);
else
return searchInsert(nums,numsSize/2,target);
}
else
{
if(target>*(nums+numsSize/2))
return numsSize/2+1+searchInsert(nums+numsSize/2+1,numsSize/2,target);
else
return searchInsert(nums,numsSize/2,target);
}
}

}

如下用迭代实现

int searchInsert(int* nums, int numsSize, int target)
{int beg,end,mid;
beg = 0;
end = numsSize-1;

while(beg <= end){
mid = (beg + end) / 2;
if(nums[mid] == target)
return mid;
else if(nums[mid] > target)
end = mid - 1;
else
beg = mid + 1;
}
return beg;
}

对于二分搜索,最好不要用元素个数作为参数,最好用元素位置标签来实现二分搜索。

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