zoukankan      html  css  js  c++  java
  • 折半查找(java)(边学习边更新)

    ---恢复内容开始---

     1 class ArrayTest3 
     2 {
     3     public static void main(String[] args) 
     4     {
     5         //int [] arr=new int[]{54,45,6,5,34,656,34,2};
     6         //int index=GetIndex(arr,2);
     7         //System.out.println("index="+index);
     8 
     9         int [] arr1=new int[]{2,4,5,7,12,34,35,46,67,89,99};
    10         int index1=HalfSearch(arr1,34);
    11         System.out.println("index1="+index1);
    12         int index2=HalfSearch_2(arr1,34);
    13         System.out.println("index2="+index2);
    14     }
    15     /*
    16     折半查找的主要思想:
    17     当所要查找的值(key)大于中间值(arr[mid]),则最小值的下标(min)变为中间值下标加1(mid+1),
    18     如果所要查找的值小于中间值,则最大值的下标(max)变为中间值下标减1(mid-1),
    19     查找到之后返回中值下标,否则返回-1。
    20     */
    21     //折半查找效率较高,但是前提是数组必须是有序的
    22     public static int HalfSearch(int [] arr,int key)
    23     {
    24         int min=0,max=arr.length-1,mid;
    25         
    26         while(min<max)//当最小的值的下标大于最大值就跳出循环,说明查找不到指定的值
    27         {
    28             mid=(min+max)/2;
    29             if(key>arr[mid])
    30                 min=mid+1;
    31             else if(key<arr[mid])
    32                 max=mid-1;
    33             else 
    34                 return mid;
    35         }
    36         return -1;
    37     }
    38 
    39     //另一种折半排序的想法
    40     public static int HalfSearch_2(int [] arr,int key)
    41     {
    42         int min=0,max=arr.length-1,mid;
    43         mid=(min+max)/2;
    44         while(arr[mid]!=key)//当中值不等于所指定的值,那就说明找不到(不存在)该值
    45         {
    46             mid=(min+max)/2;
    47             if(key>arr[mid])
    48                 min=mid+1;
    49             else if(key<arr[mid])
    50                 max=mid-1;
    51             if(min>max)
    52                 return -1;
    53             mid=(min+max)/2;
    54         }
    55             return mid;
    56     }
    57 
    58 
    59 
    60     //寻找数组值为key第一次出现的位置
    61     public static int GetIndex(int arr [],int key)
    62     {
    63         for(int i=0;i<arr.length;i++)
    64         {
    65             if(arr[i]==key)
    66                 return i;
    67         }
    68         return -1;
    69     }
    70 }

    ---恢复内容结束---

  • 相关阅读:
    Java面试集合(一)
    Java面试集合(一)
    Android-如何显示版本号并制作3秒跳转页
    Android-如何显示版本号并制作3秒跳转页
    安卓入门教程(十五)- Fragment,Service,WAMP下载
    安卓入门教程(十五)- Fragment,Service,WAMP下载
    网络开发Socket和ServerSocket
    网络开发Socket和ServerSocket
    深入浅出的Java网络通信
    深入浅出的Java网络通信
  • 原文地址:https://www.cnblogs.com/sunshine6/p/5815275.html
Copyright © 2011-2022 走看看