递归算法和迭代算法

这周的任务是用Java实现二进制搜索 ,您需要编写迭代和递归二进制搜索算法 。 在计算机科学中,二进制搜索或半间隔搜索是一种分而治之的算法,用于在排序数组中定位项目的位置。 二进制搜索通过将输入值与数组的中间元素进行比较来工作。 比较确定元素是否等于输入,小于输入或大于输入。 当要比较的元素等于输入时,搜索将停止并通常返回该元素的位置。 如果元素不等于输入,则进行比较以确定输入是否小于或大于元素。 然后,根据算法的不同,算法重新开始,但仅搜索数组元素的顶部或底部子集。 如果输入不在数组内,则算法通常会输出一个唯一的值来表明这一点。

二进制搜索算法通常将每次连续迭代要检查的项目数量减半,从而在对数时间内定位给定的项目(或确定其不存在)。 二进制搜索是一种分而治之的搜索算法。 它通过将输入集分成两半然后应用算法并重复相同的步骤直到完成工作来工作。

Java中的二进制搜索实现

该算法是递归实现的。 另外,有关Java中的二进制搜索实现的一个有趣的事实是,著名的作者Joshua Bloch
有效的Java书籍在“ java.util.Arrays”中编写了二进制搜索。

import java.util.Arrays;
import java.util.Scanner;
/**
* Java program to implement Binary Search. We have implemented Iterative
* version of Binary Search Algorithm in Java
*
* @author Javin Paul
*/
public class IterativeBinarySearch {public static void main(String args[]) {int[] list = new int[]{23, 43, 31, 12};int number = 12;Arrays.sort(list);System.out.printf("Binary Search %d in integer array %s %n", number,Arrays.toString(list));binarySearch(list, 12);System.out.printf("Binary Search %d in integer array %s %n", 43, Arrays.toString(list));binarySearch(list, 43);list = new int[]{123, 243, 331, 1298};number = 331;Arrays.sort(list);System.out.printf("Binary Search %d in integer array %s %n", number, Arrays.toString(list));binarySearch(list, 331);System.out.printf("Binary Search %d in integer array %s %n", 331, Arrays.toString(list));binarySearch(list, 1333);// Using Core Java API and Collection framework// Precondition to the Arrays.binarySearchArrays.sort(list);// Search an elementint index = Arrays.binarySearch(list, 3);}/*** Perform a binary Search in Sorted Array in Java** @param input* @param number* @return location of element in array*/public static void binarySearch(int[] input, int number) {int first = 0;int last = input.length - 1;int middle = (first + last) / 2;while (first <= last) {if (input[middle] < number) {first = middle + 1;} else if (input[middle] == number) {System.out.printf(number + " found at location %d %n", middle);break;} else {last = middle - 1;}middle = (first + last) / 2;}if (first > last) {System.out.println(number + " is not present in the list.\n");}}
}Output
Binary Search 12 in integer array [12, 23, 31, 43]
12 found at location 0
Binary Search 43 in integer array [12, 23, 31, 43]
43 found at location 3
Binary Search 331 in integer array [123, 243, 331, 1298]
331 found at location 2
Binary Search 331 in integer array [123, 243, 331, 1298]
1333 is not present in the list.

这就是如何在Java中实现迭代二进制搜索的全部内容。

感谢您到目前为止阅读本文。 如果您喜欢这篇文章,请与您的朋友和同事分享。 如果您有任何疑问或反馈,请留言。

翻译自: https://www.javacodegeeks.com/2018/06/binary-search-java-without-recursion.html

递归算法和迭代算法

递归算法和迭代算法_Java中没有递归的二进制搜索–迭代算法相关推荐

  1. Java中没有递归的二进制搜索–迭代算法

    本周的任务是用Java实现二进制搜索 ,您需要编写迭代和递归二进制搜索算法 . 在计算机科学中,二进制搜索或半间隔搜索是一种分而治之的算法,用于定位项目在排序数组中的位置. 二进制搜索通过将输入值与数 ...

  2. 什么是迭代计算机编程,什么是递归?什么是迭代?

    原标题:什么是递归?什么是迭代? 先讲个故事吧. 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢! ...

  3. java程序员基础算法_java程序员必知的十种程序算法

    <java程序员必知的十种程序算法>由会员分享,可在线阅读,更多相关<java程序员必知的十种程序算法(11页珍藏版)>请在人人文库网上搜索. 1.java程序员必学的十种程序 ...

  4. c语言再大文件内搜索,C语言中大型磁盘文件的二进制搜索

    这个问题经常在StackOverflow上重复出现,但我已经阅读了所有以前的相关答案,并对问题略有不同. 我有一个包含4.75亿行相同大小的23Gb文件,每行包含一个40个字符的哈希码,后跟一个标识符 ...

  5. java迭代和 递归的异同_Java中的递归和迭代之间有什么区别?

    该递归和迭代都重复执行的指令集.递归是指函数中的语句重复调用自身时的情况.该迭代是当循环重复执行,直到控制条件为假.递归和迭代之间的主要区别在于,递归是一个过程,始终应用于函数,而迭代则应用于我们要重 ...

  6. java filefilter递归_Java中的递归+文件过滤器

    直接递归称为方法自身调用自己 间接递归可以A方法调用B方法,B方法调用方法,C方法调用A方法. 注意事项: 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出. 在递归中虽然有限定条件, ...

  7. java二分法排序算法_Java中使用二分法排序

    在数据结构中学习过关于二分法排序的算法,但都是基于C语言或者C++使用指针的方法,自己因为要在项目中使用到此算法,才开始将原有的程序改写为Java语言的.具体的说明如下: 1.二分法查找插入位置 如果 ...

  8. java中字符串的算法_Java中的字符串搜索算法

    我正在使用大量数据进行字符串匹配. 编辑:我正在匹配一个大列表中的单词与一些本体文本文件.我从本体中获取每个文件,并搜索每个文件行的第三个字符串与列表中的任何单词之间的匹配. 我在监督这样一个事实上犯 ...

  9. java 二进制转十进制的算法_java中十进制数转换二进制数

    将十进制转换成二进制的算法如下: 1.给定一个数: 2.根据十进制转换二进制的思想:把这个数除以2若为单数则为1,为偶数则为0,直到最后一个数为1为止.所以我们要做的就是用你给定的这个数除以2,如果结 ...

最新文章

  1. 智能机器人与系统高精尖创新中心2018年度开放基金项目申报通知
  2. SQL Server 索引结构及其使用(二)
  3. springcloud 之 bus 消息总线
  4. 未来,谁来为AI开源买单?科技圈顶级码农是这样看的 | CCF C³-04@百度
  5. python walk_Python os.walk()方法
  6. 计算机与现代化投稿流程,计算机与现代化投稿须知
  7. python requests库api_python利用requests库进行接口测试的方法详解
  8. BIND DNS 软件修复高危 DoS 漏洞
  9. 【UML】——为什么要使用UML
  10. 悄悄安装vcredist_x64.exe,不弹出对话框
  11. 区块链在切实改变世界的35个让人惊艳的实例数据库
  12. Java 视频资源分享(干货)
  13. Qt SQL 学习笔记二:qt建立数据库,创建和操纵表
  14. 解决hash冲突的三种方法
  15. 淘口令解析api接口_淘口令解析接口|淘口令还原接口|淘口令解密接口|淘口令转换网址接口...
  16. 电容的串联和并联的性质
  17. VMware 苹果虚拟机 Xcode真机调试失败 设备不信任该机器
  18. 阿里 P7 到底是怎样的水平 ???
  19. 在线查看.doc,.docx,.ofd,.PDF,.WPS以及Office文档的在线解析方式。
  20. 交通 流量 时间序列预测,神经网络 机器学习 BPNN

热门文章

  1. 洛谷P1650:田忌赛马(贪心)
  2. 洛谷P3791:普通数学题(整除分块、前缀和)
  3. P3273-[SCOI2011]棘手的操作【线段树,并查集】
  4. P5488-差分与前缀和【NTT,生成函数】
  5. P4300-[AHOI2006]上学路线【网络流,最短路】
  6. P2947-[USACO09MAR]向右看齐Look Up【单调栈】
  7. 【点分治】Tree(luogu 4178/金牌导航 点分治-1)
  8. 【DP】奇怪汉诺塔(ybtoj DP-1-2)
  9. 【模拟】交换(jzoj 1518)
  10. Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析