摘要:本文主要介绍了Java编程开发-数据结构与算法「二分查找」,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助。
本文主要介绍了Java编程开发-数据结构与算法「二分查找」,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助。
需求
对于一个有序的数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并求出下标,如果没有就提示”没有这个数据”。
思路分析
首先确定该数组中间的下标 mid=(left+right)/2.
然后让需要查找的数findValue和arr[mid]比较,findValue > arr[mid],说明要查找的数在arr[mid]的右边,因此向右递归.findValue < arr[mid],说明要查找的数在arr[mid]的左边,因此向左递归.findValue == arr[mid],说明找打,就返回。
退出递归的条件找到就结束递归。递归完整个数组仍然没有找到findValue,需要结束递归,即当 left > right
代码案例
package com.xie.search;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BinarySearch {
static int count = 0;
public static void main(String[] args) {
int[] arr = new int[102];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < 102; i++) {
arr[i] = i;
}
List<Integer> indexList = binarySearch(arr, 0, arr.length - 1, 1);
System.out.println("indexList = " + indexList);
System.out.println("查找次数:" + count);
/*
indexList = [1, 0]
查找次数:6
*/
}
/**
* 二分查找,查找符合值得所有索引集合
*
* @param arr 数组
* @param left 左边索引
* @param right 右边索引
* @param findValue 查找的值
* @return 找到就返回所有索引的集合,没有就返回空
*/
public static List<Integer> binarySearch(int[] arr, int left, int right, int findValue) {
count++;
List<Integer> indexList = new ArrayList<Integer>();
//当left > right时,说明递归完毕
if (left > right) {
return new ArrayList<Integer>();
}
int mid = (left + right) / 2;
int midVal = arr[mid];
if (findValue > midVal) {
//查找的值比中间值大,向右递归
return binarySearch(arr, mid + 1, right, findValue);
} else if (findValue < midVal) {
//查找的值比中间值小,向左递归
return binarySearch(arr, left, mid - 1, findValue);
} else {
//如果找到了,再向左扫描,将满足条件的加入indexList
int temp = mid - 1;
while (true) {
if (temp < 0 || arr[temp] != findValue) {
break;
}
indexList.add(temp);
temp--;
}
//再向右扫描,将满足条件的加入indexList
temp = mid + 1;
while (true) {
if (temp > right || arr[temp] != findValue) {
break;
}
indexList.add(temp);
temp++;
}
indexList.add(mid);
return indexList;
}
}
}
我是小职,记得找我
✅ 解锁高薪工作
✅ 免费获取基础课程·答疑解惑·职业测评
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号