永发信息网

二分查找的问题,大神请进(返回值是-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; // 没有找到
        }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯