我尝试将算法创建为练习,但我不太确定我在哪里犯了错误,但我一直得到"元素不存在"即使数组已排序.//
我试图创建随机数组并同时对其进行排序。同时,我希望看到它需要进行多少次比较,并且还要测量该程序在(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;
//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;
答案 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 ,这是一个非常快速的解决方法。