二分搜索算法
2014-01-04 01:26
344 查看
/**
*今天我勉强搞懂了二分查找算法,我觉得很有收获,这是个不错的算法,希望还不知道、不懂二分算法的朋友能看看!!!
*二分查找
*二分查找的前提是数组一定是有序的
*传入一个数组 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);
}
}
相关文章推荐
- 二分搜索算法
- 2-3 改写二分搜索算法
- C#二分搜索算法
- 代码之美中的二分搜索算法--Java版
- 二分搜索算法(折半查找)原理以及递归(recuition),迭代(iteration)的两种实现源代码
- 二分搜索算法
- PHP搜索算法:二分查找
- 二分搜索算法(递归和非递归实现)
- 分治算法---二分搜索算法
- 二分搜索算法
- 小白笔记--------------二分搜索算法
- hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )
- 算法系列:二分搜索算法
- 改写二分搜索算法
- 人工智能你必须掌握的32个算法(一)二分搜索算法
- 二分搜索算法
- 二分搜索算法和分治算法的简单实例
- 2004上半年软设上午试题第64、65类比二分搜索算法
- 二分搜索算法常见使用误区
- 二分搜索算法细节