二分法查找的条件设置
来源:互联网 发布:final cut mac 编辑:程序博客网 时间:2024/05/21 00:16
#include <stdio.h>int Search(int [],int);int main(int argc, char const *argv[]){ int i,j,desnum; int seq[10]; printf("Please input the array:\n"); for (;seq[i-1] != -1; ++i) scanf("%d",&seq[i]); printf("Please input the des number:\n"); scanf("%d",&Desnum); j = Search(seq,desnum); if( j == 0) printf("Not found\n"); if( j == 1) printf("Found\n"); return 0;}int Search(int seq[],int des){ int left,right,middle; left = 0; right = 9; while(left <= right) { middle = (left + right)/2; if (des == seq[middle]) return 1; else if (des < seq[middle]) right = middle -1; else left = middle +1; } return 0;}
其中关键的三个条件设置是left <= right、right = middle -1和left = middle +1,后两个较容易理解,就是将查找边界向左/右移动一个单位。但是第一个条件值得思考,为什么是<=而不是<。下面给出一个具体的例子:
假设查找到最后一步,范围锁定在seq[2] = 3, seq[3] = 4之间。此时有三种情况:1.目标数为3;2.目标数为4;3.目标数为3.5。下面依次分析:
1.当目标数为3时,下一步middle = 2,找到;
2.当目标数为4时,下一步middle = 2,4 > 3,left = 3。这时候如果设置的是left < right,那么就退出循环了,返回没找到,明显错误,所以应该设置为left <= right;
3.当目标数为3.5时(类型要改为float),下一步middle = 2,3 < 3.5,left = right = 3,下一步middle = 3 < 3.5,left = 4,退出循环,表示没找到。
综上所述,条件应该设置为 left <= right.
0 0
- 二分法查找的条件设置
- 用二分法查找满足条件值的最大下标
- 用二分法查找出满足条件值的最大下标(满足条件的值有多个)
- 二分法查找的实现
- 二分法查找的原理
- 二分法查找的算法
- 二分法查找的边界问题
- java的二分法查找
- 二分法查找的JAVA程序
- 二维数组的二分法查找
- delphi 里的二分法查找
- 旋转数组的二分法查找
- C语言的二分法查找
- php 简单的二分法查找
- 二分法查找的Python实现
- 二分法查找的C++实现
- 二分法查找对象的引用
- C++数组的二分法查找
- 通过考试(京东2017实习生真题)
- KNN(K近邻)算法的简单入门
- eclipse中的信息等价转换插件
- C语言文件操作函数
- Oracle PL/SQL开发基础(第十一弹:表集合操作)
- 二分法查找的条件设置
- MySQL数据库简介
- Nginx介绍及启动
- C#中文件转换为byte[]及Base64String
- 将二叉树拆成链表
- 200 行代码实现一个简单的区块链
- Span使用之系统提供的Span基本样式
- oracle 10046事件,解决dblink跨oracle server复制数据效率慢踩到的坑
- 购物商城---FCK