public class BinarySearch { public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int target = 7; int index = binarySearch(arr, target); if (index != -1) { System.out.println("Target found at index " + index); } else { System.out.println("Target not found"); } }}
时间: 2024-02-14 20:35:08 浏览: 84
这是一个Java程序,实现了二分查找算法。在main函数中,定义了一个有序数组arr和一个目标值target,然后调用binarySearch函数查找目标值在数组中的位置。如果找到了,则输出"Target found at index "和目标值在数组中的下标;否则输出"Target not found"。
相关问题
检查语法错误public class Test01 { public static void main(String[] args) { int[] arr = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20}; int element = 18; System.out.println(element + "在数组中的索引位置为:" + mid); System.out.println(element + "在数组中的索引位置为:" + -1); } public static int binarySearch(int[] arr,int element) { int min = 0; int max = arr.length - 1; while (true) { int mid = (min + max) / 2; if (element > arr[mid]) { min = mid + 1; } else if (element < arr[mid]) { max = mid - 1; } else { return mid; } if (min > max) { return -1; } } } }
在main方法中,需要调用binarySearch方法获取索引位置,而mid变量未定义。修改为以下代码即可:
```
public class Test01 {
public static void main(String[] args) {
int[] arr = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20};
int element = 18;
int index = binarySearch(arr, element);
System.out.println(element + "在数组中的索引位置为:" + index);
if (index == -1) {
System.out.println("元素不在数组中");
}
}
public static int binarySearch(int[] arr, int element) {
int min = 0;
int max = arr.length - 1;
while (true) {
int mid = (min + max) / 2;
if (element > arr[mid]) {
min = mid + 1;
} else if (element < arr[mid]) {
max = mid - 1;
} else {
return mid;
}
if (min > max) {
return -1;
}
}
}
}
```
#include <stdio.h> #include <stdlib.h> // 顺序查找 int sequentialSearch(int *arr, int n, int key) { for (int i = 0; i < n; ++i) { if (arr[i] == key) { return i; } } return -1; } // 二分查找 int binarySearch(int *arr, int n, int key) { int left = 0, right = n - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == key) { return mid; } else if (arr[mid] < key) { left = mid + 1; } else { right = mid - 1; } } return -1; } int main() { int n, menu, key; printf("请输入查找表的表长n:"); scanf("%d", &n); int *arr = (int *) malloc(n * sizeof(int)); printf("请输入%d个关键字值:", n); for (int i = 0; i < n; ++i) { scanf("%d", &arr[i]); } while (1) { printf("请选择查找方法:\n"); printf("1. 顺序查找\n"); printf("2. 二分查找\n"); printf("3. 退出程序\n"); scanf("%d", &menu); switch (menu) { case 1: printf("请输入要查找的关键值:"); scanf("%d", &key); int index1 = sequentialSearch(arr, n, key); if (index1 == -1) { printf("没有找到该记录\n"); } else { printf("找到了该记录,位置为:%d\n", index1); } break; case 2: printf("请输入要查找的关键值:"); scanf("%d", &key); int index2 = binarySearch(arr, n, key); if (index2 == -1) { printf("没有找到该记录\n"); } else { printf("找到了该记录,位置为:%d\n", index2); } break; case 3: free(arr); return 0; default: printf("无效的选择,请重新输入\n"); break; } } }此程序的算法描述
这是一个简单的查找算法实现,包括顺序查找和二分查找两种方法。程序的算法描述如下:
1. 顺序查找算法:遍历整个查找表,逐个比较每个元素与目标关键字是否相等,如果找到则返回该元素的下标,否则返回 -1。
2. 二分查找算法:在有序的查找表中,将查找区间不断缩小一半,直到找到目标关键字或者查找区间为空为止。具体实现中,每次取查找区间的中间元素与目标关键字比较,如果相等则返回该元素的下标,如果目标关键字小于中间元素,则在左半部分继续查找,否则在右半部分继续查找。如果最终没有找到目标关键字,则返回 -1。
在程序中,首先用户需要输入一个查找表的长度和具体的关键字值,然后可以选择使用顺序查找或二分查找进行查找。如果找到了目标关键字,则输出该元素的下标,否则输出未找到该记录的提示。用户可以反复使用不同的查找方法查找不同的关键字,直到选择退出程序。
阅读全文