Day568.线性查找&二分查找 -数据结构和算法Java
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day568.线性查找&二分查找 -数据结构和算法Java相关的知识,希望对你有一定的参考价值。
线性查找
1、介绍
顾名思义,线性查找就是直接通过遍历
,进行查找对应的数据
2、代码实现
package com.achang.search;
/**
* @Author Achang
* @Date 2022/3/25 21:08
* 顺序查找
**/
public class SeqSearch
public static void main(String[] args)
int[] arr = 1,9,11,-1,31,89;
int index = sqeSearch(arr, 9);
System.out.println(arr[index]);
/**
* 线性查找
* @param arr 待查找数组
* @param value 查找的值
* @return 查找的值的数组下标
*/
public static int sqeSearch(int[] arr,int value)
for (int i = 0; i < arr.length; i++)
if (arr[i] == value)
return i;
return -1;
二分查找
1、介绍
如针对一个有序
的数组,进行一次一次的切半查找方式
2、思路分析
3、代码实现
①递归方式
/**
* @Author Achang
* @Date 2022/3/25 21:26
* 二分查找
**/
public class BinarySearch
public static void main(String[] args)
int[] arr = 1,3,5,7,9;
int i = binarySearch1(arr, 9, 0, arr.length);
System.out.println(i);
//递归方式
public static int binarySearch1(int[] arr,int value,int left,int right)
if (left>=right) return -1;
int mid = (left + right) / 2;
int midValue = arr[mid];
if (value > midValue)
return binarySearch1(arr,value,mid +1,right);
else if (value < midValue)
return binarySearch1(arr,value,left,mid - 1);
else
return mid;
②找到对应查找数字出现在数组中的所有索引下标
package com.achang.search;
import java.util.ArrayList;
import java.util.List;
/**
* @Author Achang
* @Date 2022/3/25 21:26
* 二分查找
**/
public class BinarySearch
public static void main(String[] args)
int[] arr = 1,3,5,7,9,9;
List<Integer> integers = binarySearch2(arr, 9, 0, arr.length);
System.out.println(integers);
/**
* 找到对应查找数字出现在数组中的所有索引下标
*/
public static List<Integer> binarySearch2(int[] arr, int value, int left, int right)
if (left>=right) return new ArrayList<>();
int mid = (left + right) / 2;
int midValue = arr[mid];
if (value > midValue)
return binarySearch2(arr,value,mid +1,right);
else if (value < midValue)
return binarySearch2(arr,value,left,mid - 1);
else
ArrayList<Integer> resIndexList = new ArrayList<>();
//向左扫描
int temp = mid - 1;
while (temp >= 0 && arr[temp] == value)
resIndexList.add(temp);
temp -= 1;
resIndexList.add(mid);
//向右扫描
temp = mid + 1;
while (temp <= arr.length-1 && arr[temp] == value)
resIndexList.add(temp);
temp += 1;
return resIndexList;
以上是关于Day568.线性查找&二分查找 -数据结构和算法Java的主要内容,如果未能解决你的问题,请参考以下文章
Python 迭代器&生成器,装饰器,递归,算法基础:二分查找二维数组转换,正则表达式,作业:计算器开发