顺序查找(OrderSearch)

温馨提示:此项目的 GitHub 地址为「myleetcode」,欢迎感兴趣的同学StarFork,纠错。

1 顺序查找

顺序查找是在一个队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率比较低。

2 时间复杂度

该算法的时间复杂度为O(n).

3 两种实现方式

  • 第一种:直接进行顺序查找。
public class OrderSearch {
	public static void main(String[] args) {
        int[] arr = new int[]{2, 3, 5, 6, 7, 3,};
        System.out.print("目标元素的索引为:");
        System.out.println(orderSearch(arr, 0));
    }

    private static int orderSearch(int[] arr, int goal) {
        // 设置初始化从数组第一个元素开始比较
        int i = 0;
        for (; i <= arr.length - 1; i++) {
            // goal为目标元素
            if (goal == arr[i]) {
                return i;
            }
        }
        // 如果待查元素不存在,则返回 -1
        return -1;
    }
}
  • 第二种:在待查数据中进行顺序性轮询查找,当存在待查的数据时返回当前数据索引位置,如果不存在则返回不存在表示-1,为了增加效率减少主要代码的操作,可以设置一个监视哨在数组的最后一位,这样就可以有效的防止数据越界了,只需要比较当前数据是否是所需要的数据即可。
public class OrderSearch {
    public static void main(String[] args) {
        int[] arr = {12, 24, 5, 52, 35, 3, 7};
        System.out.print("目标元素的索引为:");
        System.out.println(orderSearch(arr, 5));
    }

    private static int orderSearch(int[] arr, int goal) {
        // 设置临时数组,其长度比 arr 大一位
        int[] temp = new int[arr.length + 1];
        for (int i = 0; i < arr.length; i++) {
            // 将数组 arr 中的元素全部存在临时数组中
            temp[i] = arr[i];
        }
        // 设置监视哨
        temp[arr.length] = goal;
        int result;
        for (int i = 0; ; i++) {
            if (temp[i] == goal) {
                result = i;
                // 如果上述条件满足,则终止循环
                break;
            }
        }
        if (result < arr.length) {
            return result;
        } else {
            return -1;
        }
    }
}

4 Python实现

def order_search(nums, target):
    if len(nums) == 0:
        return -1
    elif len(nums) < 2 and nums[0] != target:
        return -1

    index = 0
    while index < len(nums):
        if nums[index] == target:
            return index
        index += 1

    return -1


def order_search_2(nums, target):
    if len(nums) == 0:
        return -1
    elif len(nums) < 2 and nums[0] != target:
        return -1

    nums2 = []
    for num in nums:
        nums2.append(num)

    nums2.append(target)

    index = 0
    while index < len(nums):
        if nums2[index] == target:
            break
        index += 1

    if index < len(nums):
        return index
    else:
        return -1

你可能感兴趣的:(设计模式及算法,java,算法,顺序查找)