二分搜索算法
来源:互联网 发布:刷svip永久软件 编辑:程序博客网 时间:2024/04/30 07:00
/**
*今天我勉强搞懂了二分查找算法,我觉得很有收获,这是个不错的算法,希望还不知道、不懂二分算法的朋友能看看!!!
*二分查找
*二分查找的前提是数组一定是有序的
*传入一个数组 T []
* 传入一个查找元素 T key
*返回查找结果
*/
class MyUtil
{
//在有序数组中查找特定元素的搜索算法 , 这种搜索算法每一次比较都使搜索范围缩小一半。
public static <T extends Comparable<T>> int binarySerch(T [] x , T key){
int low = 0; //低位变量,初始为 0
int high = x.length - 1; // 高位变量,初始为传入数组的长度 - 1
while(low <= high){
//mid 是中间位,这里的中间位不能直接用(high+ low) / 2的方式,会造成 整数 越界。
int mid = low + ((high -low) >> 1); //这里的异或运算的优先等级低于加减运算,所以要扩起来,不然会是死循环。
if(key.compareTo(x[mid]) < 0){ // 当查找元素小于中间元素时
high = mid -1; //最高位就折半到了mid之前的位置
}
else if(key.compareTo(x[mid]) > 0){ //档查找元素大于中间元素时
low = mid +1; //最高位就这般到了mid之后的位置
}
else{ //当查找元素等于中间位置的元素时
return mid; // 返回找到的元素位置
}
}
return -1; // 没找到就返回 -1
}
public static void main(String[] args)
{
Integer [] x = {1,2,3,4,5,6,7,8,9}; //有序的Integer数组
int key = 3; //查找元素
//String [] x = {"a","b","c","d","e","f","g","h","i","j"};//有序的String数组
//String key = "f";//查找元素
int num = binarySerch(x , key); //调用并得到返回的元素位置
System.out.println(num);
}
}
*今天我勉强搞懂了二分查找算法,我觉得很有收获,这是个不错的算法,希望还不知道、不懂二分算法的朋友能看看!!!
*二分查找
*二分查找的前提是数组一定是有序的
*传入一个数组 T []
* 传入一个查找元素 T key
*返回查找结果
*/
class MyUtil
{
//在有序数组中查找特定元素的搜索算法 , 这种搜索算法每一次比较都使搜索范围缩小一半。
public static <T extends Comparable<T>> int binarySerch(T [] x , T key){
int low = 0; //低位变量,初始为 0
int high = x.length - 1; // 高位变量,初始为传入数组的长度 - 1
while(low <= high){
//mid 是中间位,这里的中间位不能直接用(high+ low) / 2的方式,会造成 整数 越界。
int mid = low + ((high -low) >> 1); //这里的异或运算的优先等级低于加减运算,所以要扩起来,不然会是死循环。
if(key.compareTo(x[mid]) < 0){ // 当查找元素小于中间元素时
high = mid -1; //最高位就折半到了mid之前的位置
}
else if(key.compareTo(x[mid]) > 0){ //档查找元素大于中间元素时
low = mid +1; //最高位就这般到了mid之后的位置
}
else{ //当查找元素等于中间位置的元素时
return mid; // 返回找到的元素位置
}
}
return -1; // 没找到就返回 -1
}
public static void main(String[] args)
{
Integer [] x = {1,2,3,4,5,6,7,8,9}; //有序的Integer数组
int key = 3; //查找元素
//String [] x = {"a","b","c","d","e","f","g","h","i","j"};//有序的String数组
//String key = "f";//查找元素
int num = binarySerch(x , key); //调用并得到返回的元素位置
System.out.println(num);
}
}
0 0
- 【基础算法】搜索-二分搜索
- C#二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 简单算法--二分搜索
- 二分搜索算法细节
- 研究二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 分治算法--二分搜索
- java二分搜索算法
- G++不同版本的C/C++软件移植指南
- innerHTML 与 innerText的用法与异同
- Winform 验证输入TextBox身份证号是否有效
- mysql file sort
- 降低Cache失效率--编译器优化
- 二分搜索算法
- Eclipse报错:java.lang.ClassNotFoundException: ContextLoaderListener
- 【黑马程序员】Java基础04:你至少应该掌握5个异常...
- Intent flag
- spring使用注解注入HibernateTemplate的sessionFactory异常
- VBscript 中调用wshShell.run 来执行批处理命令 type I love you on a notepad
- 解析ASP.NET Mvc开发之EF延迟加载
- Android 高仿QQ 界面滑动效果
- c语言的一处陷阱: