【Java_Base】常用查找算法:顺序查找、二分查找

顺序查找

从第一个元素开始顺序比较查找。

二分查找

二分查找前提条件: 已排序的数组中查找

二分查找的基本思想是: 首先确定该查找区间的中间点位置: int mid = (low+upper) / 2;

然后将待查找的值与中间点位置的值比较:

若相等,则查找成功并返回此位置。

若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域。

若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域。

下一次查找是针对新的查找区间进行的。

 1 public class Search{
 2     public static void main(String [] args){
 3         int[] array={13,4,56,7,88,7,78,66,34,56};
 4         System.out.println("待查找的数组序列为:");
 5         for(int arr:array){
 6             System.out.print(arr+" ");
 7         }
 8         //顺序查找
 9         System.out.println("\n"+"顺序查找66的下标为:"+"\n"+sequentialSearch(array,66));
10         //排序数组
11         System.out.println("排序后的数组序列为:");
12         Sort(array);
13         //二分法查找
14         System.out.println("\n"+"二分法查找88的下标为:"+"\n"+binarySearch(array,88));
15
16     }
17     //顺序查找
18     public static int sequentialSearch(int[] a,int num){
19         int n=a.length;
20         for(int i=0;i<n;i++){
21             if(a[i]==num){
22                 return i;
23             }
24         }
25         return -1;
26     }
27     //二分查找
28     public static int binarySearch(int [] a,int num){
29         //起点
30         int low=0;
31         //终点
32         int upper=a.length-1;
33         //避免出现下标越界异常
34         while(low<=upper){
35             //中间点
36             int mid=(low+upper)/2;
37             //中间点的值小于要查找的值,更改查找的起点为中间点位置后一位
38             if(a[mid]<num){
39                 low=mid+1;
40             }
41             //中间点的值大于要查找的值,更改查找的终点为中间点位置前一位
42             else if(a[mid]>num){
43                 upper=mid-1;
44             }
45             else{
46                 return mid;
47             }
48
49         }
50         return -1;
51     }
52
53
54     //排序数组
55     public static void Sort(int[] a){
56         int n=a.length;
57         //i是比较的次数,共比较n-1次
58         for(int i=1;i<n;i++){
59             //j是进行比较的第一个元素的下标
60             for(int j=0;j<n-1;j++){
61                 if(a[j]>a[j+1]){
62                     int temp=a[j+1];
63                     a[j+1]=a[j];
64                     a[j]=temp;
65                 }
66             }
67         }
68         //遍历已排序数组
69         for(int k=0;k<n;k++){
70             System.out.print(a[k]+" ");
71         }
72     }
73
74 }

时间: 2024-08-09 22:02:10

【Java_Base】常用查找算法:顺序查找、二分查找的相关文章

查找算法总结(二分查找/二叉查找树/红黑树/散列表)

1.二分查找 二分查找时,先将被查找的键和子数组的中间键比较.如果被查找的键小于中间键,就在左子数组继续查找,如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. /** * 二分查找 */ public class BinarySearch { public static int find(int[] array, int key) { int left = 0; int right = array.length - 1; // while (left <= right)不能改为<

Java中常用的查找算法——顺序查找和二分查找

Java中常用的查找算法——顺序查找和二分查找 一.顺序查找: a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位. b) 图例说明: 原始数据:int[] a={4,6,2,8,1,9,0,3}; 要查找数字:8 代码演示: import java.util.Scanner; /* * 顺序查找 */ public class SequelSearch { public static void main(String[] arg

#查找算法#【1】简单查找:顺序、折半查找

•顺序查找 从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号:若将线性表中所有记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个失败值. •折半查找 又称为二分查找.这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列. 顺序查找比较简单,依次用数组中的每个元素和要查找的元素进行对比即可.不再贴代码说明 折半查找是一种递归过程,每折半一次,可使查找范围缩小一半,当查

Python 迭代器&amp;生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

【算法拾遗】二分查找递归非递归实现

转载请注明出处:http://blog.csdn.net/ns_code/article/details/33747953 本篇博文没太多要说的,二分查找很简单,也是常见常考的查找算法,以下是递归非递归的实现. 非递归实现: /* 非递归实现,返回对应的序号 */ int BinarySearch(int *arr,int len,int key) { if(arr==NULL || len<1) return -1; int low = 0; int high = len-1; while(l

算法——基础篇——二分查找

     二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.     首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功

可查找重复元素的二分查找算法

可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找.假设有一升序的数据集合,先找出升序集合中最中间的元素,将数据集合划分为两个子集,将最中间的元素和关键字key进行比较,如果等于key则返回:如果大于关键字key,则在前一个数据集合中查找:否则在后一个子集中查找,直到找到为止:如果没找到则返回-1. 思路: 1.先定义两个下标 , left = 0 , right = arr.length -1; 2.因为我们也不知道要循环多少次,定义一

查找算法--线性结构的查找方法

查找基本概念: 查找又称为检索,指从一批记录中找出满足指定条件的某一记录过程.在日常生活中比如通讯录查找,字典查找等经常使用查找方法:在程序设计中,查找在许多程序中需要占用很多时间,因此,一个好的查找方法可以提高程序的运行速度. 主关键字和次关键字: 在需要查找的数据结构中,每条记录一般包含多个数据域.查找条件一般是给定其中的一个或几个域的值,这些作为查找条件的域成为关键字(KEY),如果关键字可以唯一标示数据结构中的一条记录,则称此关键字(Primary Key):若关键字不能唯一区别各个不同

查找算法系列之简单查找:顺序查找、二分查找、分块查找

近期总结了各大排序算法的原理 ,并对其进行了实现,想着一并把查找算法总结了,今天就着手开始总结查找算法. 废话不多说,这篇文章从最简单的查找算法开始讲起,之后会补充复杂的二叉搜索树查找(BST)和B树,B+树查找以及哈希查找等. 顾名思义,查找就是寻找到关键字在队列中的位置,最笨的查找算法就是依次顺序比较,复杂度为O(n),但是有很多方法的复杂度可以达到O(logn)等等. 1.顺序查找 关键字与数组中的数顺序比较,时间复杂度O(n). template<class T> int OrderS

算法前戏 递归 二分查找 列表查找

一.递归 概念: 函数直接或者间接的调用自身算法的过程,则该函数称为递归函数.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略时,必须有一个明显的结束条件,称为递归出口.问题规模相比上次递归有所减少, ③递归算法解题通常显得很简洁,但递归算法解题的效率较低.所以一般不倡导使用递归算法设计程序. ④在递归调用的过程当中系统的每一层的返回点.局部变量等开辟了栈来存储.递归函数次数过多容易造成栈溢出等. 所以一般不倡导用递归算法