• 查找算法


    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("查找的值不存在数组中");

        }

      }

    }

  • 相关阅读:
    将查询语句创建新表
    java冒泡排序
    java三元运算符
    java中的>>>和>>>=
    i++和++i
    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。
    System.out.println与System.err.println的区别
    try-catch-finally
    Java常见异常类
    Vue.js环境配置
  • 原文地址:https://www.cnblogs.com/changyinlu/p/4693491.html
Copyright © 2020-2023  润新知