数据结构中经常用到查找算法,所谓查找,就是 在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。常用的查找算法有五中:顺序查找、二分查找(折半查找)、二叉排序树查找、哈希表法、分块查找。五中查找算法各有各的优点和缺点,在这篇博客中,我就介绍下各种查找方法的优缺点、局限性以及代码实现方式。
一、顺序查找算法
原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。时间复杂度为O(n),这种方式一般刚接触编程的人会用到,因为效率低下,在生产环境上很少使用的。实现代码如下:
public static int ordersearch(Integer[] arry, int des) { for (int i = 0; i <= arry.length - 1; i++) { if (des == arry[i]) return i; } return -1; }
二、二分(折半)查找算法
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。此查找算法的时间复杂度为o(log(n))。
假如有队列:10,20,30,40,50,60,70,从中查找出60所在的位置,那么
1、获取该队列的中间数据,40,与60所比较,发现不等且目标值>中间值
2、在50,60,70中查找,取中间值60,发现与目标值相等,返回该数据所在位置,查询结束
代码实现如下:
public static int binarySearch(Integer[] srcArray, int des) { int low = 0; int high = srcArray.length - 1; while ((low <= high) && (high <= srcArray.length - 1)) { // 获取中间位置 int middle = low + ((high - low) >> 1); // 如果与中间位置数据相等,查找结束,返回结果 if (des == srcArray[middle]) { return middle; // 目标值小于中间位置数据,说明目标值在前一半队列中,下一循环在前一半列表中查询 } else if (des < srcArray[middle]) { high = middle - 1; } else { // 目标值大于中间位置数据,说明目标值在后一半队列中,下一循环在后一半列表中查询 low = middle + 1; } } return -1; }
相关推荐
C++数据结构经典查找算法总结,包含详细可执行代码以及算法讲解!
查找算法总结---(附代码),带对比,时间复杂度,空间复杂度,代码分析。
经典的10大排序算法,还有二分法,二叉树的实现,和分块查找
本资料是本人倾心整理的所有排序查找算法。 包括10多种排序算法,和~20种查找算法。
掌握折半查找的概念和算法,了解它与其它查找方法的区别
包含了各种经典的数据结构和算法的总结(描述 + C++代码),例如:链表,字符串,二叉树,哈夫曼树,图,查找,排序等。
NULL 博文链接:https://baiweiyll.iteye.com/blog/981260
文档里是我写的关于查找算法的总结,包括顺序查找,折半查找,分块查找和哈希查找,包含程序和运行结果。^_^
查找算法 线性查找二分查找差值查找斐波那契查找 鉴于在排序算法时, 搞得比较乱的情况, 导致查找不太方便. 因此, 在写查找算法时, 我会将所有的东西都写在一起, 便于查找和阅读 在java中,我们常用的查找有四种: ...
对C++上的查找算法进行总结,非常的实用,是数据结构入门必学
根据自己搜集的资料很实际实用,总结了几种常用的查找算法
用C++写的最全的查找算法,顺序查找,二分查找,BST查找,哈希查找,可用于学习查找算法
自己做的路由查找算法ppt,上课用。主要从四个方面总结,1.Internet地址结构的发展2. 路由查找算法3. 路由查找算法的评价4. 相关进展
包括顺序查找、二分查找、选择排序、冒泡排序,二分排序,插入排序,希尔排序,堆排序,归并排序等
二分查找算法题个人总结
C语言基础算法总结 表达式计算、分支函数、判特殊数、数位分解合成、求最值、累加算法、典型数学问题、穷举、查找、排序、易位
常用算法总结 int HashSearch(HashTable T,KeyType K,int *pos) { //在散列表T[0..m-1]中查找K,成功时返回1。失败有两种情况:找到一个开放地址 //时返回0,表满未找到时返回-1。 *pos记录找到K或找到空结点时...
面试算法总结1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 ...
七大排序算法的总结,有代码,有算法改进的思想与代码。
2018浙江高中信息技术排序和查找算法复习资料总结.doc