折半查找(java)(边学习边更新)

Posted sunshine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折半查找(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)(边学习边更新)的主要内容,如果未能解决你的问题,请参考以下文章

排序之折半插入排序

学号20182317 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

带有边距和页面转换器的片段内的 ViewPager 无法正确呈现

在图中查找连接边

Android 底部工作表布局边距

第66题必学的泛型3-泛型化的折半查找法