查找算法

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