前面介绍了java面向对象编程,接下来几节课会重点介绍java数据结构与算法。这节课要学习有序表和二分查找算法。有序表就是一个排好序的数组,二分查找是一种高效的在有序表中查找数据的算法。
·先新建一个by research的carva原文件,把man函数从hello world中拷贝出来。
·然后创建一个静态函数,by research内函数不需要创建对象就可以直接调用。注意函数名扎法中喜欢用驼峰命名法来命名函数和变量。输入有两个参数,一个是有序数组,另一个是在查找的参数。函数的返回值是找到的数字的下标。如果没找到返回值议。
·开始实现二分查找,写声明两个变量,i和j分别指向当前要查找的区域的头和尾。刚开始时i指向数组头,j指向数组尾部。用循环不停地缩写i和g之间的区域。当i和g相等时表示要检索的区域只剩下一个元素。
·检索完了函数调用结束,具体怎么解锁?直接用i和g中间那个数跟target进行比较。如果中间数等于target直接返回m。如果中间数小于target,the target一定在m的右边。因为数组是单调递增的,这是需要将爱指向m加e。如果中间数大于target,the target一定在m的左边,这时需要将j指向m-1。
·如此多次查找,每次都缩小一半的查找范围,这样就能在login的时间内找到目标数字。
·最后循环结束了,如果还是没有找到target直接返回-1,表示找不到。
测试几个数字的二分查找,先初始化一个整型数组,查找一头一尾和中间某个数字,再检查一下程序是否有明显的问题。然后编译一下,发现有很多错,原来是made函数里面调用band research方法时没有将数组传进去,再修改一下。修改完毕再编译一下,终于编译成功。下面运行一下这个程序,发现这三个数字都找到了。