对二分查找程序的一次测试
来源:互联网 发布:clint eastwood 知乎 编辑:程序博客网 时间:2024/04/29 23:02
本文内容来源于《编程珠玑》第二版5.2节。
先看一段程序:
public class ErrirBinary {static int array[] = new int[] { 0, 1, 2, 3, 4 };public static int BinarySearch(int number) {int start = 0, middle, end = 4;while (start <= end) {middle = (start + end) / 2;if (array[middle] < number)start = middle;else if (array[middle] > number)end = middle;elsereturn middle;}return -1;}/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根for (int i = 0; i < 5; i++)System.out.println(i + "在数组中的位置是: " + BinarySearch(i));}}这段程序的输出如下:
0在数组中的位置是: 0
1在数组中的位置是: 1
2在数组中的位置是: 2
3在数组中的位置是: 3
显然没有找到4在数组中的位置,边界条件无法通过测试。
下面通过添加脚手架的方式进行跟踪测试:
public class ErrirBinary {static int array[] = new int[] { 0, 1, 2, 3, 4 };public static int BinarySearch(int number) {int start = 0, middle, end = 4;while (start <= end) {middle = (start + end) / 2;<strong>System.out.println(start + " " + middle + " " + end);//所谓脚手架</strong>if (array[middle] < number)start = middle;else if (array[middle] > number)end = middle;elsereturn middle;}return -1;}/** * @param args */public static void main(String[] args) {// TODO 自动生成的方法存根System.out.println(4 + "在数组中的位置是: " + BinarySearch(4));}}看一下输出:
0 2 4
2 3 4
3 3 4
3 3 4
3 3 4
……………………
很显然当start=3 ,end=4的时候程序陷入了死循环。
而修改方法很简单
把
if (array[middle] < number)start = middle;else if (array[middle] > number)end = middle;修改为
if (array[middle] < number)start = middle + 1;else if (array[middle] > number)end = middle - 1;即可。
0 0
- 对二分查找程序的一次测试
- 对整数的二分查找
- 对二分查找的改进
- Golang 的二分查找测试
- 对二分查找法的理解。
- 对排序的总结&&二分查找
- 基于二分查找的Junit测试实验
- 二分查找的递归算法程序
- 有序数组的二分查找程序
- 二分查找--程序易出错的地方
- Java对查找算法的实现—二分查找(二)
- 一个二分查找程序
- 二分查找程序
- 二分查找程序
- 递归 -- 二分查找程序
- 二分查找程序
- 对二分搜索算法的测试
- 二分查找的非递归程序(折半查找)
- ecshop中点击分类时如果有子分类显示子分类,没有的话就不显示
- 安全加密方案
- iOS 17个常用代码整理
- LitePal学习总结 (五)
- php优化的小细节2
- 对二分查找程序的一次测试
- Linux进程同步之POSIX信号量
- 类继承与原型继承
- C#设置默认打印机-COM和WMI二种方式
- linux下纯C++读取参数配置文件
- javascript下获取guid或者UTC时间作为唯一值
- 节约用水
- cv::Mat和CvMat的区别及相互转化
- JDK扫盲