本次主要包含内存中的查找有:顺序查找,折半查找,分块查找,二叉排序树查找,哈希表查找
1)顺序查找:是最简单的查找方式,如,a= {45,53,12,3,37,24,90,100,61,78};进行排序,java程序实现如下所示:
package com.three.five; public class SearchSX { public static void main(String[] args) { int [] a= {45,53,12,3,37,24,90,100,61,78};//定义数组 int des=90;//需要查找的目标数字 boolean flag=false; for(int i=0;i<a.length;i++) { if(des==a[i]) { System.out.println("找到目标数字:"+des+",在数组中的第 "+(i+1)+" 个位置"); flag=true; break; } } if(!flag) { System.out.println("定义的数组中没有目标数字"); } } }
以上代码运行结果为:
是按照顺序一个一个进行比较查询,最快是第一次比较匹配,最慢是最后一个比较匹配,算法的时间复杂度是O(n),
2.折半查找,也叫二分查找,需要时有序存放,查找起来会快很多,如给定的数组是(3,6,12,23,30,43,56,64,78,85,98),要查找的数据是30,方法参数可以随自己换。
则使用折半查找的程序如下所示:
package com.class02; /** * 折半查找:前提是有序的,每次都是以中间顺序为比较基数,可以提高查询效率 * @Date: 2019/3/23 9:30 * @Version: 1.0 */ public class QuickSort { static int []a={3,6,12,23,30,43,56,64,78,85,98}; public static int paritation(int []a,int key){ int low=0; int high=a.length-1; int mid; while(low<=high){ mid=(low+high)/2; System.out.println("比较数据为;"+a[mid]); if(a[mid]==key)return mid; else if(a[mid]<key)low=mid+1; else high=mid-1; } return -1; } public static void main(String []args){ int tim=QuickSort.paritation(QuickSort.a,30); System.out.print("最终比较"+tim+" 次得出结果:"); } }
运行结果为: