前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 查找算法

Java 查找算法

作者头像
赵哥窟
发布2019-03-15 10:01:42
1.1K0
发布2019-03-15 10:01:42
举报
文章被收录于专栏:日常技术分享日常技术分享
顺序查找

原理 顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位。

图例说明 原始数据:int[] a={4,6,2,8,1,9,0,3}; 要查找数字:8

image

代码

代码语言:javascript
复制
public class Search {
    public static void main(String[] args){
        int[] list = {4,6,2,8,1,9,0,3};

        Scanner input = new Scanner(System.in);
        System.out.println("请输入你要查找的数:");
        //存放控制台输入的语句
        int num = input.nextInt();
        //调用searc()方法,将返回值保存在result中
        int result = search(list, num);
        if (result == -1) {
            System.out.println("你输入的数不存在数组中");
        } else {
            System.out.println("你输入的数字在数组中的位置是:" + (result + 1) + "个");
        }
    }

    public static int search(int[] list, int num) {
        for(int i = 0; i < list.length; i++) {
            if(list[i] == num){//如果数据存在
                return i;//返回数据所在的下标,也就是位置
            }
        }
        return -1;//不存在的话返回-1
    }
}
二分查找

原理 算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。

二分算法步骤描述

① 首先确定整个查找区间的中间位置 mid = ( left + right )/ 2 ② 用待查关键字值与中间位置的关键字值进行比较; 若相等,则查找成功 若大于,则在右半个区域继续进行折半查找 若小于,则在左半个区域继续进行折半查找 ③ 对确定的缩小区域再按折半公式,重复上述步骤。

image.png

代码

代码语言:javascript
复制
public class BinarySearch {
    public static void main(String[] args) {
        int list[] = {1, 2, 3, 4, 5, 6, 7, 8};
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入要查找的数据:");
        int key = scanner.nextInt();
        int result = binarySearch(list, list.length, key);//返回数据所在位置

        if (result == -1) {
            System.out.println("你输入的数不存在数组中");
        } else {
            System.out.println("你输入的数字存在数组中的位置是:" + result  + "个");
        }
    }

    private static int binarySearch(int[] list, int length, int key) {
        int left = 0;
        int right = length - 1;
        int mid;
        while (left <= right) {
            mid = (left + right) / 2;
            if (list[mid] == key) {
                return mid;
            } else if (list[mid] > key) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return -1;//未找到返回-1
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 顺序查找
  • 二分查找
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档