Java中的顺序搜索

时间:2020-02-23 14:34:40  来源:igfitidea点击:

顺序搜索是在集合中查找元素的直接方法。
这种搜索使用循环逐个遍历每个元素,并查看它是否与我们要查找的元素匹配。
搜索机制按顺序移动,因此命名为顺序搜索。

如果对数据进行了排序,我们可以减少查找次数。
当我们超过目标元素时,我们可以停止搜索。
这仅在目标元素不存在的情况下才可能。

简单顺序搜索

对于未排序的数据,搜索方法将遍历所有元素。
在每个位置,它都会将该位置的元素与我们正在寻找的元素进行比较。
如果找到匹配项,则返回true,否则继续搜索。
如果到达末尾但找不到匹配项,则返回false。

package com.theitroad.java;

import java.util.ArrayList;
import java.util.Arrays;
public class Main {

  public static void main(String[] args) {
      int[] a = {3,2,4,5,3,2,7,6,4};
      boolean ans = contains(a,7);
      if(ans) {
          System.out.println("Number found");
      }
      else{
          System.out.println("Number not found");
      }

  }
  public static boolean contains(int[] a, int b){
      for (int i : a) {
          if (i==b){
              return true;
          }
      }
      return false;
  }
}

排序数组中的顺序搜索

对排序后的数据进行顺序搜索并不能总是降低我们所需执行的复杂性或者查找次数。
但是,如果该元素不存在,那么我们可以在搜索超过目标元素时停止搜索。

package com.theitroad.java;

import java.util.ArrayList;
import java.util.Arrays;
public class Main {

  public static void main(String[] args) {
      int[] a = {1,2,3,4,6,7,9};
      boolean ans = contains(a,5);
      if(ans) {
          System.out.println("Number found");
      }
      else{
          System.out.println("Number not found");
      }

  }
  public static boolean contains(int[] a, int b){
      for (int i : a) {
          System.out.println("Comparing with :" +i);
          if (i==b){
              return true;
          }
          else if(i>b){
              return false;
          }
      }
      return false;
  }
}

在此代码中,我们将打印与搜索机制进行比较的数字。
我们可以看到搜索停止在6处,因为6已经大于5,并且如果我们超过6,我们只会遇到大于6的数字。

这里要注意的重要一点是,最坏情况下的复杂度仍然是O(n)。
由于在最坏的情况下,我们正在寻找的元素可能是最后一个元素,因此我们需要遍历整个数组。