查找算法

a. 线性查找:从数据中,第一个元素开始查找,将其与查找的值进行比对,如果相同,就停止查找,如果不相同,则继续下一个元素的比对。直到查找到匹配的值,或者是有数据遍历完毕,结束查询。用于数据无序、随机结构。

public class TestA{

   public static void main(String[] args){

      //查找数组中,值为100的索引的位置

      int[] iarr = {45,32,67,99,87,66,88,100,54,98};

      int count = 0;

      //数组是无序。只能采用线性查找

      for(int i = 0;i < iarr.length;i ++){

        count ++;

        System.out.println("查询次数:" + count );

        //进行对比

        if(iarr[i] == 100){

          System.out.println("100在数组中的索引为:"+ i);

          //一旦找到以后,不需要往下查找,结束循环

          break;

        }

      }

  }  

}

 

 

b. 二分查找:前提:数据必须是有序的(升序、降序排列)。首先跟数据中中间位置的值进行比对。如果相同,结束查找,返回位置。如果中间值小于查找值,那么在后部分查找,如果中间值大于查找值,那么在前部分中查找, 在接下来部分中比较中间值, 直到查找到目标值或者无法在分为两部分。

 

public class TestB{

  public static void main(String[] args){

    sortTwo();

  }

 

  public static void sortTwo(){

    int[] iarr = {23,34,54,55,66,68,88,99,102,120,180};

    //查找值为120

    int i = 120;

    int findex = 0;//查找范围 开始索引

    int lindex = iarr.length - 1;//查找范围 结束索引

    int lindex = iarr.length - 1;//查找范围 结束索引

    int mindex = -1;//查找范围中间索引

    int index = -1;//查找到结果的索引

    int count = 0;

    //未知循环多少次,才能结束

    while(findex <= lindex){

      count ++;

      mindex = (findex + lindex) / 2;//查找范围中间索引

      System.out.println("findex:" + findex + ",lindex:" + lindex +

                ",mindex:" + mindex + ",count:" + count);

      int temp = iarr[mindex];

      if(temp == i){

        index = mindex;

        break; //找到结果就结束循环

      }else if(temp < i){//在后部分查找

        findex = mindex + 1;

      }else if(temp > i){//在前部分查找

        lindex = mindex -1;

      }

    }

    if(index != -1){

      System.out.println("索引位置为:" + index);

    }else{

      System.out.println("查找的值不存在数组中");

    }

  }

 

}

 

转载于:https://www.cnblogs.com/changyinlu/p/4693491.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql测试数据图表_mysql测试数据表

1.截取至后盾人用于mysql数据测试请在navicat中执行一下命令生成测试数据表/*Navicat Premium Data TransferSource Server : 我的本地连接Source Server Type : MySQLSource Server Version : 50726Source Host : localhost:3306Source Schema : laravelTarget Server Type : …

常用归档压缩命令

1. 打包tar打包表示把一堆文件变成一个tar ####打包工具-f ####指定生成包的名字-c ####创建包-v ####显示创建过程-t ####查看包中内容-x ####解包-r ####添加文件到包中--delete filename ##删除包中指定文件--get filename ##取出包中指定文件cffrcvf 等组合使用2. 压缩…

spring集合的注入

<bean id"date" class"java.util.Date"></bean> <bean id"test" class"test.Test"> <!--注入list-->   <property name"list">     <list>       <value>1</valu…

爬虫实战篇---12306抢票爬虫

&#xff08;1&#xff09;、前言 &#xff08;此代码经过我的实测具有较强的实用型)每逢佳节&#xff0c;大家对于回家抢票这件事是不是特别头疼呢&#xff1f;今天我在网上发现了这个代码&#xff0c;通过一天的学习&#xff0c;与大家分析下&#xff0c;大家可以直接拿来进行…

php和mysql处理树状_分级_无限分类_分层数据的方法_PHP和MySQL处理树状、分级、无限分类、分层数据的方法...

文章标题中的多个词语表达的其实是一个意思&#xff0c;就是递归分类数据&#xff0c;分级数据非常类似数据结构中的树状结构&#xff0c;即每个节点有自己的孩子节点&#xff0c;孩子结点本身也是父亲节点。这是一个递归、分层形式。可以称之为树形层级数据。层级数据结构是编…

LeetCode 70. Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 一开始想用排列组合的方式&#xff0c;但是公式不太好些&#xff0c;后来想用递归的方式&#x…

04 java 基础:数据类型

java 数据类型&#xff1a;基本类型与引用类型 基本类型&#xff1a;数值型&#xff0c;其中数值型分为整型、浮点型&#xff0c;整型包括 byte、short 、int、long &#xff0c;默认为 int 类型。浮点类型分为单精度、双精度&#xff0c;分为 float、double &#xff0c;默认为…

Git 远程仓库分支管理

目录 目录速查表关联远程代码仓库克隆远程仓库 分支管理创建分支 切换分支合并分支删除分支解决冲突速查表 指令作用git branch查看分支git branch newBranchName创建分支git checkout branchName切换分支giit checkout -b newBranchName创建切换分支git merge branchName合并分…

call,apply

1.call要逐个传入参数 2apply方法的必须 function curry(fn){var argsArray.prototype.slice.call(arguments,1);return function(){var innerArgsArray.prototype.slice.call(arguments);var finalArgsargs.concat(innerArgs);console.log(finalArgs);return fn(finalArgs);//…

2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】

应该一眼看出来是贪心题&#xff0c;然后想最优解是什么。正确的贪心策略是【原棋盘上每个位置的棋子】都往最近的左边【目标棋盘上棋子】移动&#xff0c;如果左边没有棋子了那就闲置最后处理&#xff0c;如果目标棋盘在该位置上也有棋子&#xff0c;那就算距离为0&#xff08…

idea清理svn信息_IntelliJ IDEA SVN的账号修改 信息清除

来到编译器的setting设置 搜索subversion 点击subversion 找到下面的clear auth...按钮,点击一下 就可以了…如果我们不小心输入svn账号错误的话,后面就一直提示认证失败,不能checkout代码. 这个是因为svn把你输入的账号进行了缓存. 如果我们想重新输入新的账号,必须要清除缓存…

同步手绘板——json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯&#xff08;包括C、C、C#、Java、JavaScript、Perl、Python等&#xff09;。这些特性使JSON成为…

[HNOI2008]玩具装箱TOY

洛谷题目连接:[HNOI2008]玩具装箱TOY 题目描述 P教授要去看奥运&#xff0c;但是他舍不下他的玩具&#xff0c;于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压缩&#xff0c;其可以将任意物品变成一堆&#xff0c;再放到一种特殊的一维容器中。P教授有编号为1...N的…

C语言-结构体内存对齐

C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。内容虽然很基础&#xff0c;但一不小心就会弄错。写出一个struct&#xff0c;然后sizeof&#xff0c;你会不会经常对结果感到奇怪&#xff1f;sizeof的结果往往都比你声明的变量总长度要大&#xff0c;这是怎么回…

nginx 二进制包安装mysql_二进制安装mysql5.7

下载地址&#xff1a;https://downloads.mysql.com/archives/community/[rootlocalhost soft]# lsmysql-5.7.17-linux-glibc2.5-x86_64.tar.gz nginx-1.12.2 nginx-1.12.2.tar.gz[rootlocalhost soft]#1.详细描安装的过程1.1关闭防火墙systemctl stop firewalld.service #停止f…

.NET 类型(Types)的那些事

引言 您是.Net工程师&#xff1f;那 .NetFramework中的类型您知道有三大类吗&#xff1f;&#xff08;除了引用类型和值类型&#xff0c;还有&#xff1f;&#xff09; 引用类型一定在“堆”上&#xff0c;值类型一定在“栈”上&#xff1f; 那引用类型在内存中的布局细节您又知…

几种去除数组中重复元素的方法、数组去重

工作中遇到的一个问题&#xff0c;就是去除数组中重复的元素&#xff0c;记录一下几种有效的方法&#xff1a; 第一种思路&#xff1a;遍历要删除的数组arr, 把元素分别放入另一个数组tmp中&#xff0c;在判断该元素在arr中不存在才允许放入tmp中。 <!DOCTYPE html> <…

MongoDB学习使用

一、什么是MongoDB&#xff1f; MongoDB是一个高性能&#xff0c;开源&#xff0c;无模式的文档型数据库&#xff0c;是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式&#xff0c; NoSql&#xff0c;全称是 Not Only Sql,指的是…

域账号更改密码之后代理需要重新配置

在使用域账号的时候&#xff0c;如果需要配置账户和密码&#xff0c;那么最好记录下来&#xff0c;否则将来找不到就很尴尬了。 我遇到的问题是&#xff0c;因为在另外一台电脑配置了域账号&#xff0c;用来联网&#xff0c;提供网络给visual studio 1.Firefox 这个代理的账号…

wcf精通1-15

随笔- 197 文章- 0 评论- 3407 十五天精通WCF——第一天 三种Binding让你KO80%的业务 转眼wcf技术已经出现很多年了&#xff0c;也在.net界混的风生水起&#xff0c;同时.net也是一个高度封装的框架&#xff0c;作为在wcf食物链最顶端的我们所能做的任务已经简单的不能再简单…