二分法查找已排序数列中目标数字的位置
2017-11-02 21:54
239 查看
#include<iostream> using namespace std; int search(int list[], int n,int find) { int start = 0, end = n - 1; while (start <= end) { int middle = (start + end) / 2; if (find == list[middle]) return middle; else if (find > list[middle]) start = middle + 1; else end = middle - 1; } } int main() { int a[10] = { 1,2,3,4,5,6,7,8,9,10}; cout << search(a, 10, 6); cin.get(); return 0; }二分法使用最后的确定的数就是二分的中位数,因此最后返回middle,n为奇偶没有关系,因此不必区分奇偶分情况
int middle = (start + end) / 2;
int取的时候舍弃小数位置
使用while (start <= end)作为终止条件,即最后二分法只剩下一个数字,即为查找的数,
在判断左右序列时改变起始于终止位置即可,即middle+or-1;
相关文章推荐
- 利用二分法查找一个数字在数组中的位置
- UVA 10474-Where is the Marble?(排序查找在数字在新序列中的位置)
- 剑指offer——面试题38:数字在排序数组中出现的次数(利用二分查找来找第一次和最后一次的位置)
- 在排序数组中查找和为给定值的两个数字--总结
- 程序员面试题精选(10):在排序数组中查找和为给定值的两个数字
- 在排序数组中查找和为给定值的两个数字
- 9.11排序与查找(五)——有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 数列中不含1,将含有1的数字全部去掉(管理员不喜欢1,1排序问题)
- java中选择排序,冒泡排序和二分法查找学习记录
- 【练习】输入一个已经按升序排序过的数组和一个数字sum,在数组中查找两个数,使得它们 的和正好是输入的那个数字sum,要求时间复杂度为O(n)
- 在排序好的数组插入一个数字,数字要插入到合适的位置上
- Java 查找某个数字在数组中第一次和最后一次出现的位置
- 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 二分法之查找最接近目标数的数
- C语言 编写字符串操作函数strrchr,在字符串中查找目标字符最后一次出现的位置,返回指向这次位置的指针。
- 剑指Offer_53 在排序数组中查找数字
- java 排序与二分法查找代码
- java选择排序,冒泡排序分析,附带二分法查找
- 《剑指Offer》查找和排序——旋转数组中的最小数字