二分查找的核心思想就是根据有序数组的中间值判断目标所在的区间,每比较一次目标所在的范围都会缩小一半,当目标值和中间值相等的时候就找到了该目标值对应的数组下标,查找成功;当low>heigh的时候,就表明没有找到对应的元素,查找失败。
一、递归方式的二分查找
import java.util.Scanner; public class BitSearch{ public static void main(String args[]){ Scanner scanner=new Scanner(System.in); int total=scanner.nextInt(); int[] array=new int[1024]; for(int i=0;i<total;i++){ array[i]=scanner.nextInt(); } int aim=scanner.nextInt(); int resultIndex=bitSearch(array,aim,0,total-1); if(resultIndex==-1){ System.out.println("没有找到目标!"); }else{ System.out.println("查找到的索引值为:"+resultIndex); System.out.println(array[resultIndex]); } } public static void output(int[] array,int total){ for(int i=0;i<total;i++){ System.out.print(array[i]+" "); } System.out.println(); } public static int bitSearch(int[] array,int aim,int start,int end){ if(start<=end){ int mid=(start+end)/2; if(array[mid]==aim){ return mid; } else if(array[mid]>aim){ return bitSearch(array,aim,start,mid-1); }else{ return bitSearch(array,aim,mid+1,end); } } return -1; } }
二、非递归方式的二分查找
只需要替换掉上面的查找方法即可:
public static int bitSearch(int[] array,int aim,int start,int end){ while(start<=end){ int mid=(start+end)/2; if(array[mid]==aim){ return mid; }else if(array[mid]<aim){ start=mid+1; }else{ end=mid-1; } } return -1; }
三、测试方法
使用之前的MyRandom类,但是需要修改一下:
import java.util.Random; public class MyRandom { public static void main(String args[]){ int[] array=new int[1024]; for(int i=0;i<1024;i++){ array[i]=i; } System.out.println("1024"); for(int i=0;i<1024;i++){ System.out.print(array[i]+" "); } System.out.println(); Random random=new Random(); System.out.println(random.nextInt(1024)); // System.out.println(1024); } }
其中
Random random=new Random(); System.out.println(random.nextInt(1024));
用于能够差找到的情况下的测试;
System.out.println(1024);
用于查找不到的情况下的测试(1024不在0-1023之间)
四、测试命令
java MyRandom | java BitSearch
如果找不到:
相关推荐
文件名中的"Sun数据结构第8章查找(第22-25讲).ppt"和"Sun数据结构第9章排序(第25-27讲).ppt"表明,内容可能详细涵盖了查找算法的各个方面,包括二分查找的原理、实现和优化,以及排序算法的介绍、实现步骤和性能...
在本教程中,我们将深入探讨几个关键的数据结构:栈、队列、二叉树、顺序查找、二分查找以及图的遍历。这些基础知识对于理解和编写高效的算法至关重要。 1. 栈(Stack) 栈是一种后进先出(LIFO)的数据结构,类似...
此外,二分查找不适用于链表等非随机访问的数据结构,因为链表的元素访问通常不是按索引顺序的,无法快速跳跃到中间位置。 在实际应用中,二分查找常用于大型数据库、搜索引擎以及各种需要高效查找的场景。例如,在...
关于数据结构二分查找程序代码,经典详细。
/* 实验任务: (1) 设计算法创建二叉排序树,按照中序遍历输出数据;查找指定元素,给出结点地址,给出比较次数。 (2) 采用除留余数函数实现散列(哈希)存储,某种方法解决冲突。 */
总的来说,二分查找法是C++数据结构学习中的一个重要部分,对于提高程序的运行效率有着重要作用。理解并能熟练运用二分查找法,将有助于提升作为程序员的数据处理能力。通过不断的实践和练习,初学者可以更好地掌握...
(1) 对下列数据表,分别采用二分查找算法实现查找,给出查找过程依次所比较的元素,并以二分查找的判定树来解释。 (2) 设计出在二叉排序树中插入结点的算法,在此基础上实现构建二叉排序树的算法。 (3) 设计算法在...
在这个实验报告中,我们关注的是“二分查找”这一数据结构算法,这是一种在有序列表中查找特定元素的方法。 二分查找算法的基本思想是利用排序后的数据特性,每次查找都将搜索范围减半。这种方法极大地提高了查找...
#### 一、二分查找(Binary Search) **定义与适用条件:** 二分查找是一种在有序数组中查找特定元素的高效算法。为了使用二分查找,数组必须是按照升序或降序排列的,并且通常采用顺序存储结构。 **基本思想:** 1....
### 数据结构:二分查找详解 #### 知识点概览 在计算机科学与软件工程领域,数据结构是存储和组织数据的一种特殊方式,而算法则是处理这些数据的一系列指令。其中,查找算法用于在数据集合中寻找特定元素的位置或...
本实验报告主要关注两种查找算法的实现:顺序查找和二分查找,这两种方法在不同的场景下各有优势。 首先,顺序查找是最基础的查找算法之一。在含有n个元素的顺序表中,顺序查找的策略是从头到尾逐个比较,直到找到...
一、实验目的: 熟悉各种查找算法及其复杂性,能够根据实际情况选择合适的存储结构。 二、实验要求: 1、掌握查找的基本方法。 2、提交实验报告,报告...编程分别对有序顺序表的顺序查找,二分查找算法进行实现。
本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...
在实验报告的程序源代码中,可以看到包含了主函数和各个功能函数的实现,如`S_Search`(顺序查找)、`Binary_Search`(二分查找)、`D_Insertsort`(直接插入排序)、`Select_Sort`(直接选择排序)和`Bubble_Sort`...
二分查找算法,c语言实现,绝对可以运行。快来下载吧
例如,二分查找法适用于有序数组,而散列表的查找则依赖于哈希函数。 总结来说,动态查找表是一种能够适应数据变化的数据结构,它结合了数据抽象和高效查找算法,以提高数据操作的效率。理解并掌握动态查找表的原理...
2. **二分查找**:二分查找也称为折半查找,适用于有序数组。算法首先将目标值与数组中间元素比较,如果目标值小于中间元素,则在数组左半部分继续查找;反之,在右半部分查找。每次比较后,搜索范围都会减半,因此...
在这个“数据结构查找实验报告”中,我们重点探讨了三种基本的查找方法:顺序查找、折半查找以及二叉排序树查找。 1. **顺序查找**:是最基础的查找方法,适用于任何无序或有序的数据集合。它从数据集的第一个元素...
本文将深入探讨几种常见的查找技术,包括顺序查找、二分查找以及基于数据结构的查找方法。 1. **基本概念** - 查找成功:如果在数据集合中找到了特定元素,就认为查找成功,并返回该元素的信息。 - 查找不成功:...
结合其他数据结构,如平衡二叉搜索树(AVL树、红黑树等),二分查找可以实现高效的动态查找和插入操作。 压缩包中的"Search"文件很可能包含了这两种二分查找算法的实现源代码,供学习者参考和分析。通过阅读和理解...