分治法——二分查找
2016-05-27 11:16
197 查看
基于循环和递归
递归法: public int binary(int []data,int k)
{
if(data==null||data.length==0)
return -1;
else
return binarySearch(data,0,data.length-1,k);
}
public int binarySearch(int []data,int low,int high,int k)
{
if(low>high)
return -1;
int mid=low+(high-low)/2;//防止溢出;
if(data[mid]<k)
return binarySearch(data,mid+1,high,k);
else if(data[mid]>k)
return binarySearch(data,low,mid-1,k);
else
return mid;
}循环法:
//循环形式
public int binaryC(int data[],int k)
{
if(data==null||data.length==0)
return -1;
int low=0;
int high=data.length-1;
while(low<high-1)//防止low和high相邻可能出现死循环的情况;
{
int mid=low+(high-low)/2;
if(data[mid]==k)
return mid;
else if(data[mid]<k)
low=mid;
else
high=mid;
}
if(data[high]==k)
return high;
else if(data[low]==k)
return low;
return -1;
}
递归法: public int binary(int []data,int k)
{
if(data==null||data.length==0)
return -1;
else
return binarySearch(data,0,data.length-1,k);
}
public int binarySearch(int []data,int low,int high,int k)
{
if(low>high)
return -1;
int mid=low+(high-low)/2;//防止溢出;
if(data[mid]<k)
return binarySearch(data,mid+1,high,k);
else if(data[mid]>k)
return binarySearch(data,low,mid-1,k);
else
return mid;
}循环法:
//循环形式
public int binaryC(int data[],int k)
{
if(data==null||data.length==0)
return -1;
int low=0;
int high=data.length-1;
while(low<high-1)//防止low和high相邻可能出现死循环的情况;
{
int mid=low+(high-low)/2;
if(data[mid]==k)
return mid;
else if(data[mid]<k)
low=mid;
else
high=mid;
}
if(data[high]==k)
return high;
else if(data[low]==k)
return low;
return -1;
}
相关文章推荐
- POJ 1502 MPI Maelstrom最短路问题
- 有关window.location.hash
- 遍历Map的四种方法
- AFNetworking 3.0迁移指南
- Android 最火的快速开发框架AndroidAnnotations使用详解
- date java 时间相关
- tomcat6目录结构
- 初识Retrofit
- 34.Search for a Range LeetCode Java版代码
- 软件设计模式详解:OCP原则
- cell上添加 bin
- Oracle DataBase 简介
- 第六次上机实验
- 23种设计模式再回顾
- esayui的combotree属性值
- solr 中文单字分词
- mysql常用函数汇总
- 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
- iOS网络编程开发—JSON解析与XML解析
- C# Winform中的ComboBox控件绑定数据库项目作为列表内容