- 2
- 0
- 约4.62千字
- 约 23页
- 2018-02-24 发布于浙江
- 举报
二分技术
二分技术 --二分答案和二分查找 排序的意义 为查找带来方便 在一个无序序列中查找某一个元素,只能挨个询问,而在有序序列中,我们往往采取“折半”的方式进行查找,这就是二分。 故二分查找只适用于有序序列 二分查找 算法步骤: 将原序列划分成元素个数尽量接近的两个子序列,然后递归查找。 常见写法 对于一个单调递增序列 int bsearch(int a[],int x,int y,int v){ //在数组a的[x,y)区间中查找目标v int m; while(xy){ m=(x+y)/2;//从中间将数组分为左右两段 if(a[m]==v)return m;//如果找到,返回 else if(a[m]v)y=m-1;//如果目标比中间元素的小,则以后只在左边找 else x=m+1;}//如果目标比中间元素大,则以后只在右边找 } return -1;} 思考:对于上面的代码,如果序列中存在多个v,我们找到的是哪一个? 2 3 4 5 5 7和2 3 4 5 5中查找5 这样的答案有时并不理想,我们能不能找到目标的一个区间呢,怎么找? 二分查找求下界 int lower_bound(int a[],int x,int y,int v){ //查找数组a的[x,y)区间中目标v的最先出现位置,返回区间可能为[x,y],如果不存在,则返回一个下标i,表示在此处插入v(原来的a[i]……
原创力文档

文档评论(0)