3.11 程序改错
来源:互联网 发布:死神辣条淘宝 编辑:程序博客网 时间:2024/05/31 19:01
问题:
二分查找的错误代码:
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; }}
- 3.11 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 程序改错
- 3.11 程序改错(二分查找)
- 程序改错总结
- c语言程序改错
- 关于类程序改错
- 程序改错题
- 阅读程序改错
- hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- Google Chrome中的高性能网络 (三)
- 马士兵_JAVA自学之路(为那些目标模糊的码农们)
- Schema
- Android ListView 重要的属性
- 3.11 程序改错
- Quartz学习
- 低学历的程序员注意了(Relief原创)
- 技术人员如何创业:打造超强执行力团队
- [Android] Android开发优化之——使用软引用和弱引用
- 递归的理解
- 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)
- 易语言新手入门教程第十三课 - 制作QQ自动登录器
- 关于Win8系统无线连接经常为受限状态的解决办法