1.实践题目
7-1 二分查找 (20 分)
输入n值(1<=n<=1000)、n 个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入格式:
输入共三行: 第一行是n值; 第二行是n 个整数; 第三行是x值。
输出格式:
输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
输入样例:
4
1 2 3 4
1
输出样例:
0
2
2.问题描述
要求对输入的数组运用二分查找法,从数组中查找给定的元素,查找成功则输出其所在位置及比较次数,否则输出-1及比较次数。
3.算法描述
运用二分查找法进行搜索
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] a = new int[10000];
for (int i = 0; i < n; i++) {
a[i] = input.nextInt();
}
int x = input.nextInt();
BinarySearch(a, x, n);
}
public static int BinarySearch(int a[], int x, int n) {
int left = 0;
int right = n - 1;
int count = 0;
while (left <= right) {
int middle = (left + right) / 2;
count++;
if (x == a[middle]) {
System.out.println(middle);
System.out.print(count);
return middle;
}
if (x > a[middle]) {
left = middle + 1;
} else {
right = middle - 1;
}
}
System.out.println("-1");
System.out.print(count);
return -1;
}
}
4.算法时间及空间复杂度分析
时间复杂度:该题运用了二分查找算法,即每执行一次while循环,待查找数组的长度减小一半,则时间复杂度为T(n) = O(logn)
空间复杂度:因为辅助空间是常数级别的,空间复杂度为O(1)
5.心得体会
本次实践完成了三道题,每一题都有各自的难点,在写算法的时候,应尽量优化算法,尽可能让时间复杂度小,学会优化算法;另外平时要多看书本上的例题,同时多做题,找到写算法的感觉。此次实践以小组方式进行,在合作过程中,彼此的交流能够更有效率完成题目,也促进了双方的进步,希望在以后实践讨论的过程中收获更多知识,不断成长。
原文:https://www.cnblogs.com/Daylight-Deng/p/11575736.html