常用的查找
来源:互联网 发布:数据来源英文翻译 编辑:程序博客网 时间:2024/05/16 15:23
查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算。
顺序查找
基本思想:表的一端开始顺序扫描线性表,依次将扫描到的值和给定值相比较。
public boolean orderQuery(int[]values,int value){ for(int i=0;i<values.length;i++){ if(values[i]==value){ return true; } } return false; }
二分查找
基本思想:每次和中间的数相比较,然后确定在左边一半查找还是右边一半查找,每次下来都减少一半的数量。
public boolean twoQuery(int[]values,int value){ int start=0; int end=values.length-1; int minddle=0; //中间位置下标 while(true){ minddle=(end+start)/2; //每次对折一下 //确定需要查找的值在左边还是右边 if(value<values[minddle]){ end=minddle-1; }else if(value>values[minddle]){ start=minddle+1; } if(value==values[minddle]){ return true; } if(start>end){ return false; //当开始下标超过结束下标即表示该值没有 } } }
块查找
基本思想:将数组平均分为N块但是要满足N-1块里面最大值比N块最小值小,分块完成后建立索引数组 索引数组里面放置每块的最大值。
查找先去索引数组查找对应的块再查找。
/** * 基于二分的查找块(可替换为顺序查找) * @param index 索引数组 * @param value 需要判断的值 * @return 返回该值对应的块索引 */ public int getBlock(int[]index,int value){ int start=0,end=index.length-1,minddle=0; while(true){ if(start>end){ break; } minddle=(end+start)/2; if(value<index[minddle]){ end=minddle-1; }else if(value>index[minddle]){ start=minddle+1; }else{ //恰好为块的最大值 return minddle; } } //是否在索引之内 if(start>=index.length||end<0){ return -1; }else { //块的位置 return start; } } /** * * @param values 目标数组 * @param index 索引数组(里面放置的是每块的最大值) * @param value 需要查找的值 * @return 是否包含 * 模仿参数:int[]values={12,22,24, 25,30,31, 35,52,52, 59} * int[]index={24,31,52,59}; */ public boolean contain(int[] values,int[]index,int value){ //根据索引计算出具体块的下标 int blockIndex=getBlock(index,value); if(blockIndex==-1){ return false; } int size=0; //每块的个数 if(values.length%index.length==0){ size=values.length/index.length; }else{ size=values.length/index.length+1; } int start=blockIndex*size; //所在块开始下标 int end=0; //所在块结束下标 if(blockIndex==index.length-1){//当为最后一块时,需要注意最后一块的结束下标,并不可能最后一块也是size个 end=values.length-1; }else{ end=(blockIndex+1)*size-1; } //顺序查找(可替换为二分查找) for(int i=start;i<=end;i++){ if(values[i]==value){ return true; } } return false; }
1 0
- 常用的查找算法
- 常用的查找
- java实现常用的查找(线性查找,折半查找)
- 几个常用的查找算法
- Linux常用的查找命令
- 常用的正则查找表达式
- 常用查找论文的方法
- 常用的STL查找算法
- 常用的 STL 查找算法
- 常用的 STL 查找算法
- 6.3 常用的查找方法
- 常用的STL查找算法
- C++常用的查找方法
- 常用的STL查找算法
- Mybatis常用查找的总结
- C++常用的查找方法
- Java实现的常用的查找算法
- 【算法】常用的查找算法之二分查找法
- Git13--分支管理策略
- python——学习准备
- 我不是产品经理-002
- oracle将一个用户下的所有表复制到以一个用户下
- 如何使用Display Tag?附下载地址
- 常用的查找
- php zip解压 unpack错误解决方案
- java 多线程应用1例:生产者-仓库-消费者
- AngularJs入门学习
- Redis在一台主机上建立Master-Slave
- Android Studio 打包、生成jks密钥、签名Apk、多渠道打包
- Jquery EasyUi第一个例子
- codeforces #630 F. Selection of Personnel
- 添加联系人至通讯录