码迷,mamicode.com
首页 > 编程语言 > 详细

Java算法01-查找

时间:2021-05-24 04:31:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:class   结果   http   ring   plain   判断   sea   算法   void   

一、线性查找

1.基本思想:

从左到右挨个查找

2.特点:

查找效率慢

3.代码:

import java.util.Scanner;

/**
 * @author: TSCCG
 * @date: 2021/5/10
 */
public class Search {
    /**
     * 1.线性查找
     * 查询速度慢
     */
    public static void linearSearch(String[] arr, String dest1) {
        boolean isFlag1 = true; // 处理查询不到时的情况
        for(int i = 0;i < arr.length;i++) {
            if(dest1.equals(arr[i])) {
                System.out.println("查询成功!该元素在数组中的位置是:" + (i + 1));
                isFlag1 = false; // 如果找到目标元素,就将isFlag1赋值为false
            }
        }
        if(isFlag1) { // 如果未找到目标元素,那么isFlag1的值将仍为true,执行下列语句
            System.out.println("查询失败!");
        }
    }
      /**
     * 程序入口
     */
    public static void main(String[] args) {
//        Scanner sc =  new Scanner(System.in);
//        String dest1 = sc.next();
        String[] arr1 = {"AA","BB","CC","DD"};
        String dest1 = "CC";
        linearSearch(arr1,dest1);
        String dest2 = "WC";
        linearSearch(arr1,dest2);
    }
}

结果:

查询成功!该元素在数组中的位置是:3
查询失败!

二、二分查找

1.基本思想:

  1. 先找到数组中间的元素,判断与目标元素的关系:

  2. 若就是要查找的元素则输出查找成功

  3. 若大于要查找的数则继续对左半边的元素执行步骤1

  4. 若小于则继续对右半边的元素执行步骤1

  5. 重复以上步骤,直到找到目标元素

2.特点:

数组必须要有序且是顺序储存的,一般要用到排序算法(详见:https://www.cnblogs.com/TSCCG/p/14748591.html)

效率快,尤其当数据量大时

3.代码:

/**
 * @author: TSCCG
 * @date: 2021/5/10
 */
public class Search {
    /**
     * 2.二分查找
     * 查询速度快
     * 数组必须是有序的
     */
    public static void binarySearch(int[] arr,int dest2) {
        int head = 0;
        int end = arr.length - 1;
        boolean isFlag2 = true;
        while(head <= end) {
            int middle = (head + end) / 2;
            if(dest2 == arr[middle]) {
                System.out.println("查找成功,该元素在数组中的位置是:" + (middle + 1));
                isFlag2 = false;
                break;
            } else if(dest2 > arr[middle]) {
                // 走到这步时说明本次的arr[middle]不是目标元素,
                // 那么就可以将此元素排除出下次的查询范围,故head = middle + 1
                head = middle + 1;
            } else { //dest2 < arr[middle]
                end = middle - 1;
            }
        }
        if(isFlag2) {
            System.out.println("查询失败!");
        }
    }
    /**
     * 程序入口
     */
    public static void main(String[] args) {
        int[] arr2 = {-3,0,12,34,55,102};
        int dest3 = -3;
        binarySearch(arr2,dest3);
        int dest4 = 996;
        binarySearch(arr2,dest4);
    }
}

结果:

查找成功,该元素在数组中的位置是:1
查询失败!

Java算法01-查找

标签:class   结果   http   ring   plain   判断   sea   算法   void   

原文地址:https://www.cnblogs.com/TSCCG/p/14751416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!