Java中实现数组查找的函数应该怎么写?
发布时间:2023-10-05 04:11:53
在Java中,实现数组查找的函数可以有多种实现方式,下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
public class ArraySearch {
public static void main(String[] args) {
int[] array = {2, 4, 6, 8, 10};
// 查找元素8在数组中的位置
int index = linearSearch(array, 8);
System.out.println("元素8的位置是:" + index);
// 查找元素10在数组中的位置(使用二分查找)
index = binarySearch(array, 10);
System.out.println("元素10的位置是:" + index);
// 查找元素5在数组中的所有位置
List<Integer> positions = findAllPositions(array, 5);
System.out.println("元素5的所有位置是:" + positions);
}
/**
* 线性查找指定元素在数组中的 个位置
* @param array 数组
* @param target 目标元素
* @return 目标元素在数组中的位置,如果找不到则返回-1
*/
public static int linearSearch(int[] array, int target) {
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
return i;
}
}
return -1;
}
/**
* 二分查找指定元素在有序数组中的位置
* @param array 数组(要求有序)
* @param target 目标元素
* @return 目标元素在数组中的位置,如果找不到则返回-1
*/
public static int binarySearch(int[] array, int target) {
int left = 0;
int right = array.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (array[mid] == target) {
return mid;
}
else if (array[mid] < target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
/**
* 查找指定元素在数组中的所有位置
* @param array 数组
* @param target 目标元素
* @return 目标元素在数组中的所有位置,如果找不到则返回空列表
*/
public static List<Integer> findAllPositions(int[] array, int target) {
List<Integer> positions = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (array[i] == target) {
positions.add(i);
}
}
return positions;
}
}
该示例代码中定义了三个函数来实现不同的数组查找功能:
- linearSearch函数使用线性搜索算法,遍历整个数组,找到元素与目标元素相等的位置。
- binarySearch函数使用二分查找算法,要求输入的数组是有序的,根据目标元素和中间元素的比较结果,将查找范围缩小一半,直到找到目标元素或者查找范围为空。
- findAllPositions函数找到数组中所有与目标元素相等的位置,并将这些位置保存在一个列表中。
这些函数都可以根据需要进行扩展和修改,以适应具体的应用场景。
