《黑马程序员》折半查找法实现及测试练习
2014-04-06 18:55
204 查看
------- android培训、java培训、期待与您交流! ----------
/** * 折半查找算法 * 先写一个方法查找指定的key在数组中的位置 * 然后写折半查找的两种方法 * 用于折半查找的数组必须要是有序的 * * 在数组中插入一个元素,还要保证数组是有序的 */ public static void main(String[] args) { int [] arr={8,17,20,32,115}; int retKey=getKey(arr, 32); System.out.println("获取的key在数组中的位置:"+retKey); int halfKey_1=halfSearch_1(arr, 32); System.out.println("二分查找的结果:"+halfKey_1); int halfKey_2=halfSearch_2(arr,20); System.out.println("二分查找的结果:"+halfKey_2); //在数组中插入元素,还要保证数组是有序的 //我们可以通过折半查找来获取到该元素应该插入在数组中的哪个位置 System.out.println("元素应插入在:"+getInsetE_index(arr, 10)+"角标位"); } //第三种查找方式: public static int getInsetE_index(int [] arr,int key){ int min,max=arr.length-1,mid; min=0; //初始的最小角标 while(min<=max){ //最小角标<=最大角标的时候才进行折半查找 mid=(min+max)>>1; //>>位置运行,右移1位即是/2,效率还高一些 if(key>arr[mid]){ min=mid+1; }else if(key<arr[mid]){ max=mid-1; }else return mid; //说明已经找到 } return min; //返回最小值 } //第二种查找方式: public static int halfSearch_2(int [] arr,int key){ int min,max=arr.length-1,mid; min=0; //初始的最小角标 while(min<=max){ //最小角标<=最大角标的时候才进行折半查找 mid=(min+max)>>1; //>>位置运行,右移1位即是/2,效率还高一些 if(key>arr[mid]){ min=mid+1; }else if(key<arr[mid]){ max=mid-1; }else return mid; //说明已经找到 } return -1; //没有找到 } //第一种查找方式: //如果key不是中间角标上的元素就一直进行折半查找。 public static int halfSearch_1(int [] arr,int key){ //三个变量:最小角标,最大角标,中间值的角标 int min,max=arr.length-1,mid; //初始化最小值 的角标为0 min=0; mid=(min+max)/2; //中间值的计算方式 while(key!=arr[mid]){ //key==arr[mid] 循环就结束了就代表找到了 //如果中间值不等于key那就说明没有找到就要一直找下去 if(key>arr[mid]){ //如果传入的key大于中间值角标上的元素 //就要在中间角标的右边进行折半查找 min=mid+1; //最小角标=中间角标+1 }else if(key<arr[mid]){ //如果传入的key小球中间值角标上的元素 //就要在中间角标的左边进行折半查找 max=mid-1; //最大角标左移,最大角标=中间角标-1 } //上面的判断只是在判断key在不同的情况下,最小角标和最大角标的移动变化。 mid=(min+max)/2; //继续让它折半查找 } //如果不等于那就是等于了,直接返回中间值 return mid; } //先做查找一个指定的key在数组中的位置 public static int getKey(int[] arr,int key){ for (int i = 0; i < arr.length; i++) { if(arr[i]==key){ return i; //找到了就返回这个元素的索引 } } return -1; //如果没有找到就返回-1 } }
相关文章推荐
- SSH与SSM学习之SSH实现CRM练习06——客户列表06_页面和测试
- 练习C/C++基本功(列表和迭代器的实现和测试)
- 水晶报表导出为pdf, word , excel 格式(已经测试过,实现了该功能)
- 使用UI Automation实现自动化测试--7.2 (模拟键盘复杂操作在自动化测试中的应用)
- Python 简易实现接口测试自动化
- 使用 JavaScript 实现 XMLHttpRequest,在IE,FireFox 上测试通过!
- DalekJS – 基于 JavaScript 实现跨浏览器的自动化测试
- 配置Oracle VM VirtualBox,实现内外网访问笔记,以进行spark、hadoop集群开发测试
- zookeeper分布式锁的实现和简单Demo的性能测试
- Python练习笔记——采用生成器函数实现两数之间的偶数计算
- 逆波兰计算器,实现对负数的支持(TCPL,练习4-3)
- Jmeter简单实现登录测试
- 【数据结构练习】基于链表结构实现的队列
- Servlet的自我理解之5:请求分派和重定向对比测试实现
- 算法练习之二叉查找树 C++实现
- OpenCV实现USM锐化与测试
- windows使用nginx实现网站负载均衡测试实例
- 60.自定义View练习(五)高仿小米时钟 - 使用Camera和Matrix实现3D效果
- 配置SSL实现https+搭建本地HTTPS测试环境
- AIR Native Extension实现iOS应用内付费(In-App Purchase)全教程(四)——ANE面向IAP的测试和开发