Java-比较线性搜索和二进制搜索的性能
可能重复:Java-比较线性搜索和二进制搜索的性能,java,arrays,binary-search,Java,Arrays,Binary Search,可能重复: 编写一个程序,生成范围内的20个随机整数 从0到100。按降序排列数组。然后,接受 用户输入的整数。然后,使用以下命令搜索数组 号码。比较线性搜索和二进制搜索的性能 这是我的密码 import java.util.Arrays; import java.util.Scanner; public class search { public static void main(String args[]) { int[] num = new int[2
编写一个程序,生成范围内的20个随机整数 从0到100。按降序排列数组。然后,接受 用户输入的整数。然后,使用以下命令搜索数组 号码。比较线性搜索和二进制搜索的性能 这是我的密码
import java.util.Arrays;
import java.util.Scanner;
public class search {
public static void main(String args[]) {
int[] num = new int[20];
for (int i = 0; i < num.length; i++) {
num[i] = (int) (Math.random() * 101);
}
System.out.println("A list of 20 random intergers with 0 - 100");
System.out.println(Arrays.toString(num));
for (int j = 1; j < num.length; j++) {
for (int k = 0; k < num.length - 1; k++) {
if (num[k] < num[k + 1]) {
int hold = num[k + 1];
num[k + 1] = num[k];
num[k] = hold;
}
}
}
System.out.println("Array in descending order");
System.out.println(Arrays.toString(num));
Scanner input = new Scanner(System.in);
System.out.print("Enter a number to search: ");
int num2 = input.nextInt();
int loop = 0;
for ( int cnt = 0; cnt < num.length; cnt++ )
{
if ( num[cnt] == num2 )
{
loop = cnt;
System.out.println(num2+ " found");
}
}
System.out.println("Linear search - "+loop+ " loop(s)");
int loop2 = 0;
int low = 0; // low element subscript
int high = num.length - 1; // high element subscript
int middle; // middle element subscript
while ( low <= high ) {
middle = ( low + high ) / 2;
if ( num2 == num[ middle ] ) {
}
else if ( num2 > num[ middle ] )
{
low = middle +1;
loop2++;
}
else{
high = middle - 1;
loop2++;
}
}
System.out.println("Binary search - "+loop2+ " loop(s)");
}
}
导入java.util.array;
导入java.util.Scanner;
公共类搜索{
公共静态void main(字符串参数[]){
int[]num=新的int[20];
for(int i=0;i
我可以得到线性搜索的循环数。但是,我无法获得二进制搜索循环数。我建议使用比较计数代替循环计数,因为它更能反映算法的成本。你可以很容易地计算比较。但在这种特殊情况下,两者恰好是等价的
int comparisons = 0;
while ( low <= high ) {
middle = ( low + high ) / 2;
++comparisons;
if ( num2 > num[ middle ] ) {
low = middle +1;
}
else if ( num2 < num[ middle ] ) {
high = middle - 1;
}
else {
break;
}
}
System.out.println( "Binary search - " + comprisons + " loop(s)");
int比较=0;
while(低数值[中间]){
低=中+1;
}
else if(num2
您的二进制搜索缺少中断:
if ( num2 == num[ middle ] ) {
}
此外,您的二进制搜索是升序,但实际上您有一个降序!要么反向排序,要么调整搜索算法。你说“无法获取”是什么意思?您是否有错误或其他问题?
比较线性搜索和二进制搜索的性能
可能还意味着执行的比较次数,而不是计算循环次数。System.out.println(“二进制搜索-”+loop2+“循环”)的输出是什么代码>?如果您找到要查找的元素,我建议您停止搜索。如果你不这样做,你总是会得到两个搜索的最坏情况。如果要计算比较,则应计算If语句的两个分支。只数一半是不够的。甚至平等的理由也是一种比较。所以,循环计数是正确的。你是对的,对不起。我已经编辑了源代码。我删除了否决票。但是,如果将所有三个比较合并到一个if-else-if-else结构中,仍然可以减少代码进行的比较次数。现在,您总是在每次迭代中进行相等性检查。我已经编辑了您的代码来反映这一点,如果您不满意,请随时回复。