数据结构——顺序(线性)查找(算法)

本文详细介绍了线性搜索算法的基本原理及其实现方法,包括如何查找数组中第一个、最后一个及所有指定值的位置。通过具体代码示例,展示了线性搜索算法在实际应用中的灵活性和实用性。
概述
  • 依次对数组的元素进行遍历,当数组指定位置元素与要查找的值相等时,返回指定位置即可。
    不需要数组有序
实例代码:
  • 查找在数组的第一个元素位置
    /**
     * 获取查找到的第一个元素的位置
     *
     * @param array 数组
     * @param value 要查找的值
     * @return 查找到,返回index,未查找到返回-1
     */
    private static int linearSearchFirstValue(int[] array, int value) {
        if (ObjectUtils.isEmpty(array)) {
            throw new RuntimeException("数组为空");
        }
        for (int i = 0; i < array.length; i++) {
            if (array[i] == value) {
                return i;
            }
        }
        return -1;
    }
  • 查找在数组的最后一个元素位置
    /**
     * 获取查找到的最后一个元素的位置
     *
     * @param array 数组
     * @param value 要查找的值
     * @return 查找到,返回index,未查找到返回-1
     */
    private static int linearSearchLastValue(int[] array, int value) {
        if (ObjectUtils.isEmpty(array)) {
            throw new RuntimeException("数组为空");
        }
        for (int i = 0; i < array.length; i++) {
            if (array[i] == value) {
                return i;
            }
        }
        return -1;
    }
  • 获取在数组的所有元素位置
    /**
     * 获取所有元素的值
     *
     * @param array 数组
     * @param value 要查找的值
     * @return 返回元素的所有位置,空数组表示为找到相关位置
     */
    private static List<Integer> linearSearchAllValue(int[] array, int value) {
        if (ObjectUtils.isEmpty(array)) {
            throw new RuntimeException("数组为空");
        }
        List<Integer> indexes = Lists.newArrayList();
        for (int i = array.length - 1; i >= 0; i--) {
            if (array[i] == value) {
                indexes.add(i);
            }
        }
        return indexes;
    }
  • 测试代码
public class SearchUtil {
    public static void main(String[] args) {
        int[] array = {1, 5, 8, 3, 8, 9};
//        int value = 10;
        int value = 8;
        int index = linearSearchFirstValue(array, value);
        System.out.printf("第一个 %d 的位置是:%d\n", value, index);
        index = linearSearchLastValue(array, value);
        System.out.printf("最后一个 %d 的位置是:%d\n", value, index);
        System.out.printf("所有 %d 的位置是:%s\n", value, linearSearchAllValue(array, value).toString());
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值