折半查找与优化
来源:互联网 发布:linux搭建邮件服务器 编辑:程序博客网 时间:2024/05/21 13:21
public class Arraydemo5 { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = {17,34,89,131,502,667}; System.out.println("arr.length="+arr.length); printArray(arr); System.out.println(getIndex_3(arr,11,0,arr.length-1)); } public static void printArray(int[] arr) { System.out.print("["); for(int x=0; x<arr.length; x++){ if(x!=arr.length-1) System.out.print(arr[x]+","); else System.out.println(arr[x]+"]"); } } /* 数组常见功能:查找 明确一:结果 有,返回所在的位置 明确二:未知数 有,要查找的元素值,容器 */ public static int getIndex(int[] arr,int key) { for(int x=0; x<arr.length; x++) if(arr[x] == key) return x; return -1;//这句不能没有 因为已经定义了返回值类型int 上一句的return是被控制的 如果没有找到值 则没有返回 这不符合已定义的返回值类型int 所以要加一句 } public static int getIndex_2(int[] arr,int key,int min,int max) { /* 有序数组 首先 取arr.length+0/2 if(arr[mid]==key) return mid; else */ int mid = (max + min) / 2; while(arr[mid] != key && max > min){ if(arr[mid] > key){ max = mid-1; mid = (min + max) / 2; } else{ min = mid+1; mid = (min + max) / 2; } } if(max < min) return -1; return mid; }// 可以发现mid=(min+max)/2做了两次 可以优化// if(arr[mid]>key) max=mid-1;// else min=mid+1;// if(max<min) return -1;// mid放到条件判断语句之后又是一个小小的优化 // mid=(min+max)/2; 见3// 下方的4更清晰 public static int getIndex_4(int[] arr,int key,int min,int max){ while(min<=max){ int mid = (max + min)>>1; if(arr[mid]>key) max=mid-1; else if(arr[mid]<key) min=mid+1; else return mid; } return -1; } public static int getIndex_3(int[] arr,int key,int min,int max){ int mid = (max + min)>>1; while(arr[mid]!=key){ if(arr[mid]>key) max=mid-1; else min=mid+1; if(max<min) return -1; mid=(min+max)/2; } return mid; }}
阅读全文
0 0
- 折半查找与优化
- 折半插入与折半查找
- 简单查找与折半查找
- 折半查找的优化版本
- 冒泡优化排序+折半查找
- 高效排序与折半查找
- 折半查找与插入实现
- 折半查找与折半查找的上下界问题
- 算法:顺序查找与折半查找
- 折半查找与二叉查找树
- 数据结构与算法-查找-折半查找
- zoj1101-----------Gamblers----------快排与折半查找
- 选择法降序与折半查找法
- 折半查找的递归实现与qsort
- 折半查找递归与非递归实现
- 递归与迭代的折半查找
- JAVA冒泡与选择排序,折半查找
- JAVA冒泡与选择排序,折半查找
- 史上最好的正则表达式教程
- 嵌入式Linux应用开发完全手册(四)UART
- ConcurrentLinkedQueue、AraayBlockingQueue、LinkedBlockingQueue 区别及使用场景
- 循环队列,可变长队列(缓冲)及优化
- 关于更换系统后的一些小问题
- 折半查找与优化
- 服务器开发之简单的TCP回射服务器(一):服务器程序
- MyCat初步学习
- 可输入/选择的下拉框 -- 异步编程
- es5和es6中封装继承的不同
- Leetcode 654. Maximum Binary Tree 最大二叉树 解题报告
- mybatis逆向工程
- hdu 6119 百度之星初赛B 小小粉丝度度熊
- LRCN (2)