你真的会写二分查找吗?
来源:互联网 发布:下载无人机航拍软件, 编辑:程序博客网 时间:2024/06/10 03:04
二分查找
/** * 二分查找,找到该值在数组中的下标,否则为-1 */static int binarySerach(int[] array, int key) { int left = 0; int right = array.length - 1; // 这里必须是 <= while (left <= right) { int mid = (left + right) / 2; if (array[mid] == key) { return mid; } else if (array[mid] < key) { left = mid + 1; } else { right = mid - 1; } } return -1;}
每次移动left和right指针的时候,需要在mid的基础上+1或者-1, 防止出现死循环, 程序也就能够正确的运行。
注意:代码中的判断条件必须是while (left <= right),否则的话判断条件不完整,比如:array[3] = {1, 3, 5};待查找的键为5,此时在(low < high)条件下就会找不到,因为low和high相等时,指向元素5,但是此时条件不成立,没有进入while()中。
例题
给定一个已经排好序的字符串数组,空字符串散布在该数组中,编写一个函数寻找一个 给定字符串的位置。
思路:既然有序,一定是二分查找。当遇到空字符时,mid+1,一直到mid不为空字符。
#include<iostream>using namespace std;int search(string s[],int low,int high,string x) { if(x == "") return -1; while(low <= high) { int mid = (high-low)/2+low; int t = mid; while(s[t] == "" && t<=high) { t++; } if(s[t] == x) return t; else if(s[t] < x) low = t+1; else high = mid-1; } return -1;}int main() { string s[13] = { "at", "", "", "", "ball", "", "", "car", "", "", "dad", "", "" }; cout<<search(s, 0, 12, "ball")<<endl; return 0;}
阅读全文
0 0
- 你真的会写二分查找吗
- 你真的会写二分查找吗?
- 你真的会写二分查找吗
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 二分查找,你真的会吗?
- 二分查找,你真的会吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- 你真的会二分查找吗?
- Java Web 内置对象实例解析
- C语言实验——输出字符串
- javascript中break和continue
- devops [持续交付实践] 开篇:持续集成&持续交付综述
- 基于Zookeeper集群的分布式锁
- 你真的会写二分查找吗?
- java中特殊字符\b在windows控制台的动画应用
- spring boot 在centos下安装为服务
- python知识点(初学向,持续更新)
- HihoCoder 1259 数位DP
- 基于ssm框架的个人博客系统(10)--编写博客页面开发
- 生成中间带logo的二维码
- Java IO 学习笔记(一)
- SPOJ DQUERY 离线树状数组or主席树