二分查找的问题,大神请进(返回值是-1,另外好像一次调用方法中只要返回一个值就会自动结束这个方法吗)
答案:1 悬赏:50 手机版
解决时间 2021-01-12 06:30
- 提问者网友:我的未来我做主
- 2021-01-11 23:19
二分查找的问题,大神请进(返回值是-1,另外好像一次调用方法中只要返回一个值就会自动结束这个方法吗)
最佳答案
- 五星知识达人网友:woshuo
- 2021-01-12 00:45
首先你的二分查找算法模型是错的,因为它并没有体现出高位指针与低位指针是否已超过重合点?如果超过时就结束查找。你应该这样写:
Java语言:
public static void main(String[] args){
int array[]={1,2,3,4,5};
System.out.println(binarySearch(array, 3)); // print 2
System.out.println(binarySearch(array, 100)); // print -1
}
static int binarySearch(int[] array,int findValue){
int low,high,middle;
low=0; // 低位指针位置
high=array.length-1; // 高位指针位置
while(low<=high){ // 指针是已超过重合点?
middle=(low+high)/2;// 定位到中间
if(findValue else if(findValue>array[middle]) low=middle+1;// 向高位靠拢
else return middle; // 找到了
}
return -1; // 没有找到
}
C#语言:
static void Main(string[] args)
{
int[] array={1,2,3,4,5};
Console.WriteLine(BinarySearch(array, 3)); // print 2
Console.WriteLine(BinarySearch(array, 100));// print -1
Console.ReadKey(true);
}
///
/// 折半搜索算法
///
/// 有序线性数组
/// 要搜索的值
///返回目标值所在数组的下标
static int BinarySearch(int[] array, int findValue)
{
int low, high, middle;
low = 0; // 低位指针位置
high = array.Length - 1; // 高位指针位置
while (low <= high) // 指针是已超过重合点?
{
middle = (low + high) / 2;// 定位到中间
if (findValue < array[middle]) high = middle - 1; // 向低位靠拢
else if (findValue > array[middle]) low = middle + 1;// 向高位靠拢
else return middle; // 找到了
}
return -1; // 没有找到
}
Java语言:
public static void main(String[] args){
int array[]={1,2,3,4,5};
System.out.println(binarySearch(array, 3)); // print 2
System.out.println(binarySearch(array, 100)); // print -1
}
static int binarySearch(int[] array,int findValue){
int low,high,middle;
low=0; // 低位指针位置
high=array.length-1; // 高位指针位置
while(low<=high){ // 指针是已超过重合点?
middle=(low+high)/2;// 定位到中间
if(findValue else if(findValue>array[middle]) low=middle+1;// 向高位靠拢
else return middle; // 找到了
}
return -1; // 没有找到
}
C#语言:
static void Main(string[] args)
{
int[] array={1,2,3,4,5};
Console.WriteLine(BinarySearch(array, 3)); // print 2
Console.WriteLine(BinarySearch(array, 100));// print -1
Console.ReadKey(true);
}
///
/// 折半搜索算法
///
/// 有序线性数组
/// 要搜索的值
///
static int BinarySearch(int[] array, int findValue)
{
int low, high, middle;
low = 0; // 低位指针位置
high = array.Length - 1; // 高位指针位置
while (low <= high) // 指针是已超过重合点?
{
middle = (low + high) / 2;// 定位到中间
if (findValue < array[middle]) high = middle - 1; // 向低位靠拢
else if (findValue > array[middle]) low = middle + 1;// 向高位靠拢
else return middle; // 找到了
}
return -1; // 没有找到
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯