博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找
阅读量:6623 次
发布时间:2019-06-25

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

参见编程珠玑chap4 chap9,和编程之美3.3

 

 

 

给定一个有序(不降序)数组arr,

  1. 求任意一个i使得arr[i]等于t,不存在返回-1

 

不变式:x[low]< =t<=x[high]

 

 

int biSearch(int *arr, int low, int high, int t){    int mid;     while(low<=high)    {        mid=low+(high-low)/2;        if(arr[mid]==t)        {            return mid;        }        else if(arr[mid]>t)        {           high=mid-1;        }        else        {            low=mid+1;        }    }    return -1;}

  

 

  1. 如存在重复元素,求最小的i使得arr[i]等于t,不存在返回-1

 

不变式:x[low]< t<=x[high] return high

 

1 int biSearch(int *arr, int start, int end, int t) 2  3 { 4  5     int high, low, mid; 6  7     //x[l]
=end+1 || arr[high]!=t)38 39 {40 41 return -1;42 43 }44 45 else46 47 {48 49 return high;50 51 }52 53 }

 

 

 

  1. 如存在重复元素,求最大的i使得arr[i]等于t,不存在返回-1

 

不变式:x[low]<= t<x[high] return low

 

1 int biSearch(int *arr, int start, int end, int t) 2  3 { 4  5     int high, low, mid; 6  7     //x[l]<=t

 

 

  1. 求最大的i使得arr[i]小于t,不存在返回-1

 

不变式: x[low] <t<=x[high], return low

 

1 int biSearch(int *arr, int start, int end, int t) 2  3 { 4  5     int high, low, mid; 6  7     //x[l]
t)38 39 {40 41 return -1;42 43 }44 45 else46 47 {48 49 return low;50 51 }52 53 }

 

 

 

  1. 求最小的i使得arr[i]大于t,不存在返回-1

不变式:x[low]<=t<x[high]return high

 

测试程序:

1 #include 
2 3 using namespace std; 4 5 6 void init(int *a, int n) 7 { 8 for(int i=0; i
t)42 {43 return -1;44 }45 else46 {47 return low;48 }49 }50 51 int main()52 {53 int n=5;54 int arr[n];55 56 init(arr, n);57 print(arr, n);58 for(int i=-2; i

转载于:https://www.cnblogs.com/eric-blog/archive/2012/08/17/2644269.html

你可能感兴趣的文章
Android UI学习 - Tab的学习和使用
查看>>
Windows Server入门系列之十七 ARP协议原理
查看>>
利用Python脚本管理Windows服务
查看>>
初学flask_sqlalchemy
查看>>
SQLite 3.7.13的加密解密(一)—— 前言
查看>>
修正Strut2 自带上传拦截器功能
查看>>
LYNC安装故障排除分享
查看>>
jQuery做个TextBox自动完成条
查看>>
IP地址规划
查看>>
【ZooKeeper Notes 4】可视化zookeeper的事务日志
查看>>
Globalize for Ruby on Rails
查看>>
Linux计划任务
查看>>
4-2 ADO.NET-查询和检索数据9
查看>>
用简单的命令检查电脑是否被安装木马
查看>>
Java正则表达式应用总结
查看>>
Office 365系列之八:配置和体验Exchange和Lync
查看>>
杂七杂八——C#实现二叉树,外带中序遍历
查看>>
NeHe OpenGL第十一课:飘动的旗帜
查看>>
C#枚举显示声明值类型
查看>>
在Windows下安装MongoDB
查看>>