首页 文章

二进制和线性搜索程序,以查找整数 . 如果它存在则回答是,如果不存在则回答否 . 如何让二进制搜索工作?

提问于
浏览
0

我试图让二进制搜索工作 . 它应该询问您一个数组大小,要在数组中输入的整数,并搜索数组以查找您正在查找的数字以及查找它所需的探测数量或未找到数字的响应 . 我正在遵循算法,但它要么以无限循环响应,要么根本不响应,因为它永远运行 . 有什么建议?

package assignment3;

import java.util.Scanner;

public class search{

    public static void main(String[] arg){

        Scanner range=new Scanner(System.in);

        System.out.println("Pick your array size.");

        int element=range.nextInt();

        int[] array=new int[element];

        Scanner array_list=new Scanner(System.in);

        if(element<=0){

            System.out.println("The array size you chose is not supported. You must chose again");

            Scanner tryagain=new Scanner(System.in);

            System.out.println("Try again");

            element=tryagain.nextInt();    
        }

        System.out.println("Now enter all the numbers in your array");

        String list=array_list.nextLine();

        String[] newlist=list.split("\\ ");

        int lengthofarray=newlist.length;

        for(int i=0; i<lengthofarray; i++){

            array[i]=Integer.parseInt(newlist[i]);

            System.out.println(i+" || "+array[i]);

        }

        Scanner linearSearch=new Scanner(System.in);

        System.out.println("Pick a number to see if it is in the array and how many times it took to find it.");

        int linear=linearSearch.nextInt();
        Scanner linear2=new Scanner(System.in);
        System.out.println("Now we will try the same thing with a binary search. Pick a number");
        int binarysearch=linear2.nextInt();
        int low=0;
        int high=lengthofarray-1;
        int middle;

        while(low<=high){

            middle=(low+high)/2;

            if(array[middle]>binarysearch){
                high=middle-1;
            }

            else if(array[middle]<binarysearch){
                low=middle+1;
            }
        }
        if(array[low]==binarysearch){
            System.out.println("Your number is in the array.");

        }
        else{
            System.out.println("your number is not in the array.");
        }
    }
}

2 回答

  • 1

    我认为,问题在于 array[middle] == binarysearch 时你会错过这个案子 . 看看你的二进制搜索的逻辑,你会发现 lowhigh 都没有改变,循环永远不会终止 .

    试试这个:

    while (low <= high) {
        middle = (low + high) / 2;
        if (array[middle] > binarysearch) {
            high = middle - 1;
        } else if (array[middle] == binarysearch) {
            low = middle;
            break;
        } else {
            low = middle + 1;
        }
    }
    
  • 1
    /*PROGRAM FOR BINARY SEARCH*/
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    int arr[100];
    int a,n,i,item,loc,temp;
    clrscr();
    n=1;
    loc=0;
    printf("\n\Enter total no of data: ");
    scanf("%d",&a);
    for(i=0;i<a;i++)
    {
    printf("\n Enter a[%d]:",i);
    scanf("%d",&arr[i]);
    loc=loc+1;
    }
    printf("\nEnter ITEM u want to search:");
    scanf("%d",&item);
    temp=loc+1;
    arr[temp]=item;
    while(n<=a && arr[n]!=item)
    {
    n=n+1;
    }
    if(n==arr[temp])
    {
    n=0;
    printf("\nn=%d",n);
    }
    else
    {
    printf("\n ITEM is present AT a[%d]",n);
    }
    
    getch();
    }
    

相关问题