二进制搜索保持返回元素不存在//

时间:2018-02-01 05:20:16

标签: java binary-search

我尝试将算法创建为练习,但我不太确定我在哪里犯了错误,但我一直得到"元素不存在"即使数组已排序.//

我试图创建随机数组并同时对其进行排序。同时,我希望看到它需要进行多少次比较,并且还要测量该程序在(ms)内运行所需的时间。

目前有些问题:

保持打印:元素不存在,时间为0.我知道二进制是时间有效的,但我有点粗略,当x处于0时,在0 /或1到2时很多5000或者一百万到二千万。我认为这还需要一些时间。



//main

import java.util.Arrays;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author temur
 */
public class main {
    public static int[] randomIntArray(int n, int low, int high) {
        // Set up for generating random numbers
        int range = high - low + 1;
        int shift = low;

        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * range) + shift;
        }

        return arr;
    }

    public static boolean isSorted(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            if (arr[i] > arr[i + 1]) {
                return false;
            }
        }

        return true;
    }


    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void print(int[] arr) {
        System.out.println(java.util.Arrays.toString(arr));
    }
//____________________________________________________________

    public static void main(String[] args) {
        binary ob = new binary();
        int[] arr = randomIntArray(1, 20000000, 20000000);

        Arrays.sort(arr);
        int x = 55432;
        int n = 1;

        long startTime = System.currentTimeMillis();

        int result = ob.binarySearch(arr, 0, n - 1, x);

        System.out.println(
                "Element in evaluation: " + x);
        if (result
                == -1) {
            System.out.println("Element not present");
        } else {
            System.out.println("Element found at index: "
                    + result);
        }
         System.out.println(
                "Ammount of comparisons: " + ob.count);
        long endTime = System.currentTimeMillis();
        System.out.println("Time (ms):"+ (endTime - startTime));
    }
}
&#13;
&#13;
&#13;

&#13;
&#13;
//binary

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author temur
 */
public class binary {
    
    int count = 0;

    int binarySearch(int arr[], int l, int r, int x) {
        
        count += 1;
        if (r >= l) {
            int mid = l + (r - l) / 2;
            if (arr[mid] == x) {
                return mid;
            }
            if (arr[mid] > x) {
                return binarySearch(arr, l, mid - 1, x);
            }
            return binarySearch(arr, mid + 1, r, x);
        }
        return -1;
    }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

你正在制作一个长1的数组元素,其元素随机生成在20000000到20000000之间。换句话说,它总是{20000000}。当然55432不会出现在那个数组中,二进制搜索会很快发现它。

答案 1 :(得分:0)

带有您传递的值的randomIntArray很简单,它将给出单长度数组。

运行代码

int[] arr = randomIntArray(1, 20000000, 20000000);
  System.out.println("Array "+Arrays.toString(arr));

输出

  

数组[20000000]

所以此数组中不存在值 55432 ,这是一个非常快速的解决方法。