算法基础编之二分法

我们在编程过程中总会涉及一些算法问题,然而多数JAVA程序员都很难在算法方面进行突破,很明显的列子就是我了,做了这么多年的程序开发,自己的算法还是一塌糊涂,所以今天开始,对算法准备进行突破,然而为了表示自己的每天在算法上的进步,所以,我想把每个点滴给写下来:

今天我没事就写了一个二分法查找的算法,OK,首先我们要对其进行分析,在查找算法中, 二分法查找算法的效力还是很高,我写个简单的列子来对比一下吧,比如我们使用之基本的算法方式来进行查找数组中的某个数,代码如下:

              public class SearchDemo{

                     public static void main(String args[]){

                          //基本查询方式:请详细看注释

                           int[] baseData = new int[]{2,3,4,5,6,3,2,3,4,5,6,7,8,343,2323,23,2,23,211,23,2,23};//条件数组

                           int index = 23;//所需查找的数据

                           baseSearch(baseData,index);//对其基本的方法进行测试

                           System.out.println("-----------------------------");

                           //使用二分法进行查找,详细看注释

                           int[] bearSearch =  new int[]{3,23,3,4,4,53,32,23,23,23,23,23,23,23,23,23,3,3,5,53,5,5,45,54,45,34,43};

                           int index 54;

                           bearSearch(bearSearch,index);

 

                     }

                     //这个方法是最基本的查询方式,这种查询方法相对来说性能会很差的,比如说,如果我们要查询的数字才我100万的位置,此时,我们使用这种方法可能需要查找100万次,也就是说这种查询方式会挨个按顺序进行查询,所以是不推介使用的

                     public static int baseSearch(int[] arr,int index){

                          for(int i = 0;i<arr.length;i++){

                                    if(arr[i] == index){

                                          return index;

                                    }

                          }

                          return -1;

                     }

                    

                     //这个方法使用二分查找法,相对来说解决了上面多数据时的查找所存在的问题,也就是在多数据时相对减少了查询次数,并优化了查找的方式

                     public static int bearSearch(int[] arr,int index){

                            int low = 0;          //声明一个INT变量来表示数组的最小的小标值并初始化为0

                            int hight = 0;        //声明一个INT变量来表示数组的最大下标值并对其初始化为0

                            int middle = 0;     //声明一个INT变量来表示数组的中间数并对其初始化为0

                            while(low < hight){

                                   middle = (low + hight) / 2;//对middle来进行中值设置

                                   if(arr[middle] == index){

                                             return middle;//如果第一次查找到的话就直接返回

                                   }

                                   if(index < arr[middle]){

                                            hight = middle - 1;//如果一次查找的值小于其中值的话,我们就需要抛弃其中值之后的数值,在依次继续以中值的方式来进行查找

                                   }

                                   if(index > arr[middle]){

                                            low = middle + 1;//如果查找的值大于其中值的话,我们就需要抛弃其中值之前的所有数值,再依次继续以中值的方式来进行查找

                                   }

                            }

                          return -1;//判断如果没有查找的对其返回处理

                    }

 

              }

好了以上就是关于使用二分法查找的算法代码与注释详解,如有问题可来电询问:jiangshide@hotmail.com

posted @ 2011-03-28 18:22  移动应用开发  阅读(166)  评论(0编辑  收藏  举报