一个90%程序员写不对的算法——二分查找
来源:互联网 发布:java.util.zip 加密 编辑:程序博客网 时间:2024/06/05 01:20
*二分查找:
一个90%的程序员写不对的程序,一个面试高频出现的面试题,一个开发中用之甚广的算法,一个最能体现程序员素质的代码,它就是二分查找。
图解二分查找的边界处理:
在边界处理上图中很明白,接下来说下变量的定义及其求取时的注意事项和方法:
(ps:if语句中的注意事项见代码。)
int left=0;
int right=size-1;//int right=size;
在定义mid变量的时候有三种方法:
int mid = left + ((right - left) >> 1);
//或: mid=left+((right-left)/2);
//或: mid=(left&right)+(left^rigrt)>>1)
//或: mid=left+((right-left)/2);
//或: mid=(left&right)+(left^rigrt)>>1)
前两种不说,就说第三种
left&right是求相同位的和(left^rigrt)求不同位的和
方法1:(int right=size-1;)
<span style="font-size:18px;">#include<iostream>using namespace std;#include<assert.h>int BinarySearch(int *a, int size, int x){assert(a);//一定不能为空,就用断言int left = 0;int right = size - 1;int mid = 0;while (left <= right){ mid = left + ((right - left) >> 1);//或: mid=left+((right-left)/2);//或: mid=(left&right)/*求相同位的和*/+(left^rigrt)/*求不同位的和*/>>1)if (a[mid]>x){right = mid - 1;//注意边界的控制}else if (a[mid] < x){left = mid + 1;}elsereturn mid;}return -1;}</span>
方法2:(right=size;)
<span style="font-size:18px;">#include<iostream>using namespace std;#include<assert.h>int BinarySearch(int *a, int size, int x){assert(a);//一定不能为空,就用断言int left = 0;int right=size;int mid = 0;while(left<right){ mid = left + ((right - left) >> 1);//或: mid=left+((right-left)/2);//或: mid=(left&right)/*求相同位的和*/+(left^rigrt)/*求不同位的和*/>>1)if (a[mid]>x){right=mid;//注意边界的控制}else if (a[mid] < x){left = mid + 1;}elsereturn mid;}return -1;}</span>总结:二分查找的关键是对边界的处理以及mid的定义,千万不能单纯的是mid=(left+right)/2;这样会造成不必要的麻烦,程序也会出错。
1 0
- 一个90%程序员写不对的算法——二分查找
- 90%的程序员无法正确实现二分查找算法???
- 黑马程序员——Java之二分查找算法
- 一个经典的二分查找算法
- 一个经典的二分查找算法
- 一个没有bug的二分查找算法
- 黑马程序员——Java基础查找算法:顺序查找和二分查找
- 查找算法的实现——二分查找
- Java对查找算法的实现—二分查找(二)
- 经典的查找算法1—二分查找
- 程序员必须掌握的十种算法---二分查找算法
- 查找算法之——二分查找
- C查找算法——二分查找
- 算法——查找之二分查找
- 常见查找算法之—二分查找
- 自己写的一个二分查找的c++实现
- 二分查找,要注意的地方--写一个正确的二分查找,并不简单
- 把二分查找算法写正确需要注意的地方
- 条件随机场CRF HMM,MEMM的比较
- Introducing Android Instant Apps
- iOS app打包 -- 生成ipa测试包 步骤详解
- Mybatis_java项目
- 协同开发时, 如何合并不稳定的联调代码?
- 一个90%程序员写不对的算法——二分查找
- 顺序建立链表
- POJ 2305 Out of Hay(Kruscal)
- Visual EmbedLinux Tools 0.2.5
- 计算机组成.人机转换大字典.几种字符编码
- 如何做好自己的工作
- 解决Warning:Ignoring InnerClasses attribute for an anonymous inner class associated EnclosingMethod at
- Qt: test! test!
- Qt:快速设计对话框. C++ GUI