java - 带过程输出的二分查找

标签 java binary-search

预期输出:

如果关键点位于中点下方

数据:[1,4,6,13,14,23,30,45,58,67,76,89,99]

输入键:6

二分查找:

1 step index - 0 : 1, not found !

2 step index - 1 : 4, not found !

3 step index - 2 : 6, founded !!

如果关键点大于中点

数据:[1, 4, 6, 13, 14, 23, 30, 45, 58, 67, 76, 89, 99]

输入键:89

二分查找:

1 step index - 0 : 45, not found !

2 step index - 1 : 58, not found !

3 step index - 2 : 67, not found !

4 step index - 3 : 76, not found !

5 step index - 4 : 89, founded !!

我的输出

如果关键点位于中点下方

Index- 1 = 4, data founded !

~~ FINISHED SEARCHED ~~

问题是我无法一步步打印过程。帮我完成代码。

如果关键点大于中点

Index - 10 = 4, data founded !

~~FINISHED SEARCHED~~

来源

这是我的源代码:

package binarysearch;

import java.util.Scanner;

import java.util.Arrays;

public class BinarySearch {
    
    public static void main(String [] args) throws Exception{
        Scanner input = new Scanner (System.in);
        int[] data = {1, 4, 6, 13, 14, 23, 30, 45, 58, 67, 76, 89, 99};
        boolean again = true;
        String choose;
        while(again == true){
            System.out.println("Data         : "+Arrays.toString(data));
            System.out.print("Input key : ");
            int find = input.nextInt();
            System.out.println("");
            int repeat= 0;
            int start= 0;
            int end= data.length - 1;
            int mid;
            while(start <= end){
                mid= (start+ end) / 2;
                if(find== data[mid]){
                    break;
                }else if(find> data[mid]){
                    start= mid + 1;
                }else{
                    end= mid- 1;
                }   
            }
            if(awal > akhir){
                System.out.println("Index - "+start+" = "+find+", data not founded");
            }else{
                System.out.println("Index - "+start+" = "+find+", data founded !");
            }
            
            System.out.println("~~ FINISHED SEARCHED ~~");
            System.out.println("");
            System.out.print("DO YOU WANT EXIT ? [y] / [x] ? ");
            choose= input.next();
            if(choose.equals("Y") || choose.equals("y")){
                again = true;
            }else if(choose.equals("X") || choose.equals("x")){
                again= false;
                System.exit(0);
                System.out.println("SEARCHING IS FINISHED, THANK YOU");
            }else{
                System.out.println("INVALID INPUT!!");
                again= false;
                System.exit(0);
            }
            System.out.println("");
        }
    }
}

最佳答案

你的代码对我来说似乎很好。重写了一些以帮助您调试:

    int[] data = {1, 4, 6, 13, 14, 23, 30, 45, 58, 67, 76, 89, 99};
    int find =  67;
    int start = 0;
    int end= data.length - 1;
    int mid = 0;
    System.out.println("Find - "+find);
    while (start <= end) {
        mid = (start + end) / 2;
        if(find == data[mid]) {
            break;
        } else if(find > data[mid]) {
            start = mid + 1;
        } else {
            end = mid - 1;
        }   
        System.out.println("Index - "+mid+" - val - "+data[mid]+" - not found");
    }

    if (data[mid] == find) {
        System.out.println("Index - "+start+" - val - "+find+", data found");
    } else {
        System.out.println("Data not found");
    }

关于java - 带过程输出的二分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682086/

相关文章:

java -/WEB-INF/lib/javaee-web-api-7.0.jar - jar 未加载

java - 如何使用 buffered reader 和 bufferedwriter 在 java 中读取和写入文件

algorithm - 比较顺序搜索和二分搜索

java - 无法播放播放列表中的所有歌曲

java - Android:将 arrayList 保存到文件不起作用

c++ - 在内存中二进制搜索与。基于磁盘的二进制搜索

algorithm - 随机二分查找的期望运行时间

c++ - 递归 divide et impera 二进制搜索中的错误

python - python中的二进制搜索程序不会停止循环

java - Undefined Name "Y",以及奇怪的输出问题