在类似有序序列7,8,9,0,1,2,3,4中查找一个给定的数,没有重复数字
1,顺序查找
2,二分查找
类似序列的特点是由一个最大数分成了两个有序序列,例如例子中是9把原序列分成了7,8,9和0,1,2,3,4,而二分查找的特点是数列必须有序,而且中间值特别重要
这里用到了分类讨论,总共有两层分类,
第一层分类是中间值是左侧大数列的,还是右侧小数列的
第二层分类是所查数字是在左侧还是右侧
这里主要是分类思想的应用,尤为重要,分类的标准是中间值是偏向大数列还是小数列,偏向这两个字尤为值得思考
所写代码如下:
class Solution { public: int search(vector<int>& nums, int target) { int low,high; int media; low = 0; high = nums.size() - 1; while(low <= high){ media = (high+low) / 2; if(nums[media] == target) return media; if(nums[media] < nums[high]) if(nums[media] < target && target <= nums[high]) low = media + 1; else high = media - 1; else if(nums[low] <= target && target < nums[media]) high = media - 1; else low = media + 1; } return -1; } };
3,多次二分查找
链接博客地址:http://www.cnblogs.com/ganganloveu/p/4148554.html