查找算法总结之一(静态查找表)
来源:互联网 发布:caffe windows到linux 编辑:程序博客网 时间:2024/06/05 19:29
静态查找表(Static Search Table):只作查找操作的查找表;
动态查找表(Dynamic Search Table):在查找过程中同时插入不存在的元素,或者是删除已经存在的元素。
静态查找主要有3种:顺序查找、折半查找、分块查找(索引顺序查找)
顺序查找 :一个一个的查找,时间复杂度为O(n)
/** * @param input * @param key * @return 返回关键字在数组中的位置,-1表示没有查找到该关键字 */ public static int seqSearch(int []input,int key){ for(int i=0;i<input.length-1;i++){ if(input[i]==key){ return i; } } return -1; }
折半查找 :先确定待查找记录所在的范围(区间),然后逐步缩小范围直至找到或者找不到该记录为止,时间复杂度为O(logn)
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StreamTokenizer;public class BinarySearch { /** * @param input * @param key * @return 返回关键字在数组中的位置,-1表示没有查找到该关键字 */ public static int binarySearch(int[]input,int key){ int high = input.length-1; int low = 0; while(high>=low){ int mid = (low+high)/2; if(input[mid]==key) return mid; else if(input[mid]>key){ high = mid-1; }else if(input[mid]<key){ low = mid+1; } } return -1; } public static void bubbleSort(int [] input,int n){ //外围循环n-1次,每次确定一个元素的位置,位于尾部 for(int i=0;i<n-1;i++){ //标记位,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。 boolean flag = false; //内部循环,相邻元素进行比较,比较次数逐步减1 for(int j=0;j<n-1-i;j++){ //从小到大排序 if(input[j]>input[j+1]){ int temp = input[j]; input[j] = input[j+1]; input[j+1] = temp; flag=true; } } if(flag==false){ break; } } } public static void main(String[] args) throws IOException { StreamTokenizer cin = new StreamTokenizer (new BufferedReader(new InputStreamReader(System.in))); while(cin.nextToken()!=cin.TT_EOF){ int n =(int)cin.nval; int []input = new int[n]; for(int i=0;i<n;i++){ cin.nextToken(); input[i] = (int)cin.nval; } bubbleSort(input,input.length); binarySearch(input,5); System.out.print(binarySearch(input,5)); } }}
索引顺序表的查找 :一般使用分块查找,首先对每个子表建立一个索引项,其中包括两项内容:关键字项(其值为子表中的最大关键字)、指针项(指示该子表的第一个元素在表中的位置)。索引表按关键字有序,则表或者有序或者分块有序。即是,块内无序,块间有序。
例:
0 0
- 查找算法总结之一(静态查找表)
- 查找算法总结之静态查找算法
- 查找算法(静态查找)
- 查找算法整理(一)---静态查找表:顺序表查找、折半(判定树)查找、静态查找树
- 查找(静态查找表)
- 数据结构中的查找算法-静态查找表(1)
- 【算法-查找之一】顺序查找
- 算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)
- 算法学习之查找算法:静态查找表(1)顺序表查找
- 算法学习之查找算法:静态查找表(2)有序表查找
- 静态查找表的总结
- 查找、检索 算法-总结1 静态查找结构概论
- 查找算法总结之顺序查找、二分查找、静态树查找
- 查找算法总结之顺序查找、二分查找、静态树查找
- 查找:静态查找表
- 算法:静态查找算法
- 查找算法总结之二(动态查找表)
- 数据结构--查找(静态查找表)
- 欢迎使用CSDN-markdown编辑器
- Unity5.0 天空盒(CubeMap)
- Ant build.xml中的各种变量
- Socket用法详解
- 开发人员写博客的七个理由
- 查找算法总结之一(静态查找表)
- VS2012+OpenCV配置及第一个程序
- 使用SoapUI 对WebService压力测试
- LA 3635 Pie (二分)
- android 仓库物流app调研
- eclipse中tomcat插件出现OutOfMemoryError错误的解决办法
- gsoap浅析之一
- 开源XSS平台通用信息泄露漏洞
- Netty 权威指南之java 序列化