博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.11 程序改错
阅读量:6972 次
发布时间:2019-06-27

本文共 1216 字,大约阅读时间需要 4 分钟。

问题:

二分查找的错误代码:

 

int bisearch(char** arr, int b, int e, char* v){    int minIndex = b, maxIndex = e, midIndex;    while(minIndex < maxIndex)    {        midIndex = (minIndex + maxIndex) / 2;        if (strcmp(arr[midIndex], v) <= 0)        {            minIndex = midIndex;        }        else        {            maxIndex = midIndex - 1;        }    }    if(!strcmp(arr[maxIndex], v))    {        return maxIndex;    }    else    {        return -1;    }}

递归程序要注意三方面问题:初始条件、转化、终止条件。针对上面这个程序,我们考虑如下:

 

第一个问题:midIndex = (minIndex + maxIndex) / 2;

可能溢出,最好改成:midIndex = minIndex + (maxIndex - minIndex) / 2;

第二个问题:循环终止条件可能无法到达,比如minIndex = 2, maxIndex = 3, 而arr[minIndex] <= v的时候,程序将进入死循环。

修改后代码如下:

 

int bisearch(char** arr, int b, int e, char* v){    int minIndex = b, maxIndex = e, midIndex;    while(minIndex < maxIndex - 1)    {        midIndex = minIndex + (maxIndex - minIndex) / 2;        if (strcmp(arr[midIndex], v) <= 0)        {            minIndex = midIndex;        }        else        {            maxIndex = midIndex;        }    }    if(!strcmp(arr[maxIndex], v))    {        return maxIndex;    }    else if(!strcmp(arr[minIndex, v]))    {        return minIndex;    }    else    {        return -1;    }}

 

 

转载地址:http://ekrsl.baihongyu.com/

你可能感兴趣的文章
《Adobe After Effects CS4经典教程》——1.5 对合成图像作动画处理
查看>>
Centos7.x系统网卡启动报错问题排查
查看>>
ROCBOSS v2.1.0 正式发布,PHP 微社区
查看>>
《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.3 微信公众平台的使用...
查看>>
PostGIS 坐标转换(SRID)的边界问题 - ST_Transform
查看>>
苹果Mac 30周年:那些改变世界的人和Mac电脑
查看>>
倪光南:建议政府停止采购和使用“ Win10 政府版”
查看>>
Arquillian OSGi 2.2.1.Final 发布
查看>>
《深入理解ElasticSearch》——第2章查询DSL进阶 2.1 Apache Lucene默认评分公式解释...
查看>>
《Adobe Premiere Pro CS4经典教程》——1.3 Adobe Premiere Pro CS4中的非线性编辑
查看>>
《VoIP技术构架(第2版·修订版)》一 第2章 企业电话的今天
查看>>
浏览器自动化测试解決方案 Geb
查看>>
《C程序员从校园到职场》一导读
查看>>
我希望一年前就知道 MongoDB 的那些事儿
查看>>
《Spark 官方文档》Spark独立模式
查看>>
《树莓派Python编程入门与实战(第2版)》——1.5 决定如何购买外围设备
查看>>
完全指南之在 Ubuntu 操作系统中安装及卸载软件
查看>>
《Spark 官方文档》在YARN上运行Spark
查看>>
《C++面向对象高效编程(第2版)》——2.5 数据封装的优点
查看>>
判断email格式的正则表达式
查看>>