今日分享 二分查找 java版

二分查找

也叫做折半查找

说明:元素必须是有序的,从小到大,或者从大到小都是可以的。

如果是无序的,也可以先进行排序。但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数据是否在容器当中,返回的索引无实际的意义。

**基本思想**:也称为是折半查找,属于有序查找算法。用给定值先与中间结点比较。比较完之后有三种情况:*相等

说明找到了

*要查找的数据比中间节点小

说明要查找的数字在中间节点左边*要查找的数据比中间节点大

说明要查找的数字在中间节点右边代码示例:`java

package com.itheima.search;

public class A02_BinarySearchDemo1 {

public static void main(String[] args) {

//二分查找/折半查找//核心:

//每次排除一半的查找范围

//需求: 定义一个方法利用二分查找,查询某个元素在数组中的索引//数据如下:{7,23,79,81,103,127,131,147} int[] arr = {7,23,79,81,103,127,131,147}; System.out.println(binarySearch(arr,150));}

public static int binarySearch(int[] arr, int number){

//1.定义两个变量记录要查找的范围 int min = 0;

int max = arr.length - li

//2.利用循环不断的去找要查找的数据 while(true){

if(min > max) {

return -l;

//3.找到min和max的中间位置 int mid = (min +max)/ 2;

//4.拿着mid指向的元素跟要查找的元素进行比较 if(arr[mid] > number) {

//4.1 number在mid的左边//min不变,max =mid - 1; max = mid - 1;

}else if(arr[mid]< number){

//4.2 number在mid的右边//max不变,min = mid + 1; min = mid + 1;}else{

//4.3 number跟mid指向的元素一样//找到了

return mid;}}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值