您的位置:首页 > 编程语言 > Java开发

折半查找法

2015-11-08 21:23 417 查看
学习java基础:折半查找法。折半查找法的基本思路是:设置3个变量,分别为min,mid,max。min表示数组的最小角标,max表示数组的最大角标(arr.length-1),mid表示中间角标(min+max)/2。一个数组如arr={1,2,3,4,5,7,8,12,15,17,19},min=1;max=10;mid=5;要查找的数key等于12.1.判断当中间角标mid等于要查找的数时,返回mid,即要查找数的角标位置。2.当mid不等于要查找的数时,判断这个mid与key的关系,如果mid>key,则max=mid-1;如果mid<key,则min=mid+1;3.如果key在这个数组中不存在的话,只要判断min与max的关系即可,当min>max时返回-1,表示key不存在与数组当中。具体代码实现:class HalfFind{public static void main(String[] args){int[] arr = {2,3,5,12,23,24,35,45,46,47,48};int index = half(arr,12);System.out.println("index="+index);}public static int half(int[] arr,int key){int min,mid,max;min=0;max=arr.length-1;mid=(max+min)>>2;while(min<=max){if(arr[mid]==key){return mid;}else if(arr[mid]>key){max=mid-1;mid=(min+max)/2;}else if(arr[mid]<key){min=mid+1;mid=(min+max)/2;}}return -1;}}如果给予一个值要插入在一个有序的数组当中,并在数字插入之后还保持数组的有序性,获得这个数字在新数组中的下表,只要将以上程序的返回值改为min即可比如:arr={1,2,3,4,5,7,8,12,15,17,19}这个数组当中插入6,则应该是arr[5]这个位置。在这个数组当中查找6这个值,查到最后应该是min=5,max=4,mid=4.另外在java中已经写好了一个方法可以直接折半查找到一个数。方法为:Array.binarySearch(数组名,要查找的数字).前提是引入java.util.*包。使用这个方法,当查找的数字不存在数组当中的时候,它返回的是-min-1,指的是这个数字的插入点的负数-1.这样做的好处在于,告诉你这个数在数组中不存在,并且如果你想插入这个数字应该插什么地方。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息