本帖最后由 孟浩然 于 2012-6-16 21:57 编辑
- /*
- 拆半查找 也可以说是二分查找
- 思路:先找到数组中的一个中间量,如果我要找的数比中间量大,那么就往中间量的右边继续使用这种方法查找
- 如果我要找的数比中间量小,那么就往中间量的左边继续使用这种方法查找
- 注意:拆半查找只能针对有序数列
- 定义函数:需要参数 一个数组和需要找的数
- 需要返回找到的数的角标
- */
- class HalfSearch
- {
- public static void main(String[] args)
- {
- int[] arr={1,3,7,9,13};
- halfSearch_2(0,arr.length,13,arr);
- //halfSearch_1(arr,13);
- //System.out.println(index);
- }
- //方法一 传入数组和要查找的数
- public static void halfSearch_1(int[] arr,int x)
- {
- int min=0;
- int max=arr.length-1;
- int mid=(min+max)/2;
- if(min<=max)
- {
- if(x<arr[mid])
- {
- max=mid-1;
- halfSearch_1(arr,x);
- }
- else if(x>arr[mid])
- {
- min=mid+1;
- halfSearch_1(arr,x);
- }
- else if(x==arr[mid])
- {
- System.out.println("找到角标为:"+mid);
- }
- }
- }
- //方法二 传入最小、最大角标和要找的数以及数组
- public static void halfSearch_2(int min,int max,int x,int[] arr)
- {
- int mid=(min+max)/2;
- if(max>=min)
- {
- if(arr[mid]>x)
- {
- halfSearch_2(min,mid-1,x,arr);
- }
- else if(arr[mid]<x)
- {
- halfSearch_2(mid+1,max,x,arr);
- }
- else if(arr[mid]==x)
- {
- System.out.println("找到角标为:"+mid);
- //return mid;
- }
- }
-
- }
- }
复制代码 就是上面两个方法,我觉得两个方法没有什么本质区别,但是第一个就是不能找到我要找的数,除了数组中间的那个数,第二个方法是用正常;另外两个都能编译通过,第一个运行时报错信息如下:- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
- at HalfSearch.halfSearch_1(HalfSearch.java:39)
复制代码 就是这些 好多的,我就复制了一段,还有个问题就是如过把上面的方法改成可以返回角标的怎么改,我用不好return,希望有人给我改一下,我看看,用手机连笔记本上的网,发个帖子要半个小时,哎 悲剧啊 |