美文网首页Java 杂谈Java技术分享
【爬虫】数据结构实现折半查找的算法

【爬虫】数据结构实现折半查找的算法

作者: 墨迹嘿嘿 | 来源:发表于2019-01-07 14:31 被阅读9次
image image image

数据结构实现折半查找的算法

折半查找技术,也就是二分查找,通常称为二分法查找。它的前期是线性表中的记录必须是关键码有序(通常从大到小有序),线性表必须采用顺序存储、折半查找的基本思想是:

取中间记录作为比较对象,若给定值与中间记录的关键字,则在中间记录的关键字相等,则查找成功;若给定值小于中间记录的做半,去继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

在文本排重中需要用到折半查找,需要查找一个数组中是否存在某个数。

算法维护着一个上边界hi,下边界lo,使得要查找的值可能存在此之间,例如,我们要查找88这个数:

image

初始化数据状态

下面图文示意查询88二分法的流程

image image image image.gif image.gif image.gif

实现方式:

首先我们对要查找的数据排好序,然后用递归调用的方式实现折半查找,指定一个排好序的数组和要查找的值,同时指定左边界和右边界

/*** 寻找排好数组中的一个值** @param array 要查找的数组* @param value 查找的值* @param left 左边界,这个值必须位于数组长度区间内* @param right 右边界,这个值必须位于数组长度区间内* @return 找到的值在数组中的位置,如果没找到就返回-1**/static int binarySearch(int[] array,int value, int left,int right){if(left>right){ //退出条件  return -1; //没有找到指定元素}int mid =(left + right) >>>1 ;//相当于mid=(left + right)/2if(array[mid] == value){  return mid;}else if (array[mid] > value){  //递归调用查找左边  return binarySearch(array,value,left,mid-1); }else {  //递归调用查找右边  return binarySearch(array,value,mid+1,right);}}

用非递归的方法实现折半查找

static int binarySearch(int[] array,int value, int left,int right){ int low = left;//开始位置 int high = right -1; //结束位置 while(low <= high){   int mid =(low + high)>>>1; //相当于mid = (low + right)/2   int midVal = array[mid]; //取中间值   if(midVal < value){ //中间值小于要查找的关键字比较     low = mid +1;   }else if(midVal > value){ //中间值大于要查找的关键字比较     high = mid -1;   }else {     return mid; //查找成功,返回找到的位置   } } return -(low+1); //没找到,返回负值}

需要注意的是:折半查询依赖于排好序的数组。如果是一个没有排好序的数组,则不能使用折半查找。首先需要排序处理。


qrcode_for_gh_6b52a2c51061_258.jpg

相关文章

  • 【爬虫】数据结构实现折半查找的算法

    数据结构实现折半查找的算法 折半查找技术,也就是二分查找,通常称为二分法查找。它的前期是线性表中的记录必须是关键码...

  • 算法:二分法查找(折半查找法)

    算法:二分法查找(折半查找法) 这是最经典的折半查找,而在面试的时候往往会对某些经典的数据结构和算法进行魔改,这道...

  • 排序算法

    算法与数据结构基础 查找算法: 二分查找法: 简介:二分查找法又被称为折半查找法,用于预排序的查找问题 过程: 如...

  • 二分查找

    二分查找是一种查询效率非常高的查找算法。又称折半查找。 起初在数据结构中学习递归时实现二分查找,实际上不用递归也可...

  • java实现二分查找-两种方式

    二分查找是一种查询效率非常高的查找算法。又称折半查找。 起初在数据结构中学习递归时实现二分查找,实际上不用递归也可...

  • 数据结构_查找_折半/插入/斐波那契

    数据结构_查找_折半/插入/斐波那契 这三种查找算法都是在数据列有序的前提下进行的 折半查找 对于n个元素的数据列...

  • java版折半查找法

    折半查找算法实现: public int BinSrarch1(int arrs[], int key) { in...

  • LeetCode练习day8-二分查找

    正常实现 时间复杂度 二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN...

  • 二分查找算法

    一、二分查找算法 二分查找算法又称为折半查找算法,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序...

  • 常考的数据结构与算法之算法

    本文记录一下我学习数据结构与算法中算法的知识点,使用的语言是C/C++语言 查找 二分查找又叫折半查找,要求线性表...

网友评论

    本文标题:【爬虫】数据结构实现折半查找的算法

    本文链接:https://www.haomeiwen.com/subject/txsurqtx.html