实现二进制搜索 import java.io.*; 导入java.lang.Integer; 类排序{ 公共无效查找(int val,int a[],int n){ int-mid=n/2; System.out.println(“中值为:“+a[mid]); 如果(a[mid]==val){ System.out.println(“找到”+a[mid]+“在”+mid位置”); }else if(a[mid]

实现二进制搜索 import java.io.*; 导入java.lang.Integer; 类排序{ 公共无效查找(int val,int a[],int n){ int-mid=n/2; System.out.println(“中值为:“+a[mid]); 如果(a[mid]==val){ System.out.println(“找到”+a[mid]+“在”+mid位置”); }else if(a[mid],java,Java,使用上面的代码,我希望使用二进制搜索从现有数组列表中查找用户定义的值。它只检查中间值,不检查较高或较低的值 我认为这个循环不能正常工作 请找到解决方案。您的两个内部循环: import java.io.*; import java.lang.Integer; class sort { public void find(int val, int a[], int n) { int mid = n / 2; System.out.println("the m

使用上面的代码,我希望使用二进制搜索从现有数组列表中查找用户定义的值。它只检查中间值,不检查较高或较低的值

我认为这个循环不能正常工作

请找到解决方案。

您的两个内部循环:

import java.io.*;
import java.lang.Integer;

class sort {
    public void find(int val, int a[], int n) {
        int mid = n / 2;
        System.out.println("the mid value is:" + a[mid]);
        if (a[mid] == val) {
            System.out.println("found " + a[mid] + " in position " + mid);
        } else if (a[mid] < val) {
            for (int i = mid; i < n; i++) {
                if (a[mid] == val) {
                    System.out.println("found" + val);
                }
            }
        } else if (a[mid] > val) {
            for (int i =0; i < mid; i++) {
                if (a[mid] == val) {
                    System.out.println("found" + val);
                }
            }
        }
    }


    public static void main(String args[])throws IOException {
        DataInputStream in = new DataInputStream(System.in);
        int temp;
        int a[] = new int[100];
        System.out.println("enter the nos of elements");
        int n = Integer.parseInt(in.readLine());
        for (int i =0; i < n; i++) {
            a[i] = Integer.parseInt(in.readLine());
        }
        for (int i =0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (a[i] > a[j]) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        for (int i =0; i < n; i++) {
            System.out.println(a[i]);
        }

        System.out.println("enter the value to be searched");
        int val = Integer.parseInt(in.readLine());
        sort s = new sort();
        s.find(val, a, n);
    }
}
for(int i=mid;i您的两个内部循环:

import java.io.*;
import java.lang.Integer;

class sort {
    public void find(int val, int a[], int n) {
        int mid = n / 2;
        System.out.println("the mid value is:" + a[mid]);
        if (a[mid] == val) {
            System.out.println("found " + a[mid] + " in position " + mid);
        } else if (a[mid] < val) {
            for (int i = mid; i < n; i++) {
                if (a[mid] == val) {
                    System.out.println("found" + val);
                }
            }
        } else if (a[mid] > val) {
            for (int i =0; i < mid; i++) {
                if (a[mid] == val) {
                    System.out.println("found" + val);
                }
            }
        }
    }


    public static void main(String args[])throws IOException {
        DataInputStream in = new DataInputStream(System.in);
        int temp;
        int a[] = new int[100];
        System.out.println("enter the nos of elements");
        int n = Integer.parseInt(in.readLine());
        for (int i =0; i < n; i++) {
            a[i] = Integer.parseInt(in.readLine());
        }
        for (int i =0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (a[i] > a[j]) {
                    temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
            }
        }
        for (int i =0; i < n; i++) {
            System.out.println(a[i]);
        }

        System.out.println("enter the value to be searched");
        int val = Integer.parseInt(in.readLine());
        sort s = new sort();
        s.find(val, a, n);
    }
}
for(int i=mid;i修改find()函数,如下所示,递归查找搜索下的值,该值实际上可以称为二进制搜索-

for(int i=mid;i<n;i++) 
    {
     if (a[mid] ==val)
     System.out.println("found"+val); 
}



    for(int i=0;i<mid;i++)
{
 if (  a[mid] ==val)
     System.out.println("found"+val);
    }
您可以使用startIndex为零,endIndex为数组长度减1来调用函数。

如下修改find()函数,以递归方式查找搜索下的值,该值实际上可以称为二进制搜索-

for(int i=mid;i<n;i++) 
    {
     if (a[mid] ==val)
     System.out.println("found"+val); 
}



    for(int i=0;i<mid;i++)
{
 if (  a[mid] ==val)
     System.out.println("found"+val);
    }

您可以使用startIndex为零,endIndex为数组长度减1来调用函数。

我可以建议在再次调用由这些位置定义的分区上的搜索之前检查极端位置值吗?

我可以建议在再次调用定义的分区上的搜索之前检查极端位置值吗根据这些位置?

@True Soft,它部分是二进制搜索,但是的,它不是二进制搜索。我不确定@mano是否准备好递归。@True Soft,它部分是二进制搜索,但是的,它不是二进制搜索。我不确定@mano是否准备好递归。