线性查找

  线性查找也叫顺序查找,这是最基本的一种查找方法,从给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。

  如果元素个数为 N,那么线性查找的平均次数为: N/2

  下面通过一个例子,演示线性查找:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SequentialSearch {
	//定义一个数组,存放所有数据
	static int[] array = null;
	//定义一个 set 集合,用来排除数组中重复的数
	Set<Integer> setNum = new HashSet<>();
	//定义一个整型数,表示查找次数
	int times = 0;
	/**
	 * 根据传入的 num 随机产生 num 个不重复的数
	 * @param num
	 * @return
	 */
	public int[] createArray(int num){
		array = new int[num];
		while(setNum.size()!=num){
			int temp = (int)(Math.random()*10*num);
			setNum.add(temp);
		}
		
		int j = 0;
		Iterator<Integer> it = setNum.iterator();
		while(it.hasNext()){
			array[j] = it.next();
			j++;
		}
		
		return array;
	}
	
	/***
	 * 顺序查找
	 * @return
	 */
	public int seqSearch(int num){
		array = createArray(10);//产生包含 10 个随机数的 数组
		printArray(array);  //打印产生的随机数组
		for(int i = 0 ; i< array.length ; i++){
			if(array[i] == num){
				times = i+1;	//如果找到了,返回找到的次数
			}else{
				times = -1;  //如果没找到,返回 -1
			}
		}
		return times;
	}
	
	/***
	 * 打印数组
	 * @param array
	 */
	public void printArray(int [] array){
		if(array.length == 0){
			System.out.println("[]");
		}else{
			StringBuilder sb = new StringBuilder();
			sb.append('[');
			for(int i = 0 ; i < array.length ; i++){
				if(i == array.length-1){
					sb.append(array[i]+"]");
				}else{
					sb.append(array[i]+",");
				}
			}
			System.out.println(sb);
		}
	}
	
	
	public static void main(String[] args) {
		SequentialSearch ss = new SequentialSearch();
		System.out.println(ss.seqSearch(29)); //随机查找一个数,比如 29
	}

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JDK1.8源码(四)——java.util.Arrays 类

      java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用。 ...

    IT可乐
  • Java数据结构和算法(三)——冒泡、选择、插入排序算法

      上一篇博客我们实现的数组结构是无序的,也就是纯粹按照插入顺序进行排列,那么如何进行元素排序,本篇博客我们介绍几种简单的排序算法。 1、冒泡排序   这个名词...

    IT可乐
  • 浅谈 Integer 类

      突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码: public s...

    IT可乐
  • HDUOJ-----1556Color the ball

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/327...

    Gxjun
  • 【每日算法Day 70】图解算法:小学生都会的数块数问题,你会吗?

    在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。

    godweiyang
  • 团体程序设计天梯赛-练习集 L1-028 判断素数

    输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。

    C you again 的博客
  • C#访问非托管DLL

    前段时间写了一个读卡器程序,使用到了一个DLL。在.NET 中调用DLL还是相当简单的。我也是转别人的代码,自己的不写。下面就是代码: C#中要使用动态链接库...

    用户1105954
  • 迷宫的最短路径

    题意:给定一个大小为N * M的迷宫,迷宫由通道与墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需要的最下步数。

    用户7727433
  • Contest 176 - LeetCode 1353. Maximum Number of Events That Can Be Attended (贪心)

    题意:有n个节目,每个节目有一个持续的天数,你一天只能看一个节目,问你这么多天最多能看几个节目

    ShenduCC
  • 最大连续子序列和(最大子数组和)四种最详细的解法

    解法1:穷举暴力法 枚举左端点跟右端点,然后遍历更新所有的子序列和,最终得到结果就是最大的

    用户7727433

扫码关注云+社区

领取腾讯云代金券