java二分查找法查找数组指定元素(Java字符串排序)

二分查找递归实现与循环实现代码:/***二分查找*1.二分查找又称折半查找,它是一种效率较高的查找方法。*2.二分查找要求:(1)必须采用顺序存储结构(2).必须按关键字大小有序排列*3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后*将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,…

大家好,又见面了,我是你们的朋友全栈君。

网上找到的图片便于理解
在这里插入图片描述
二分查找递归实现与循环实现代码:

/** * 二分查找 * 1.二分查找又称折半查找,它是一种效率较高的查找方法。 * 2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列 * 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后 * 将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找, * 等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。 * 4.实现: * 二分查找的实现用递归和循环两种方式 */
public class _00BinarySearch { 
   
    public static void main(String[] args) { 
   
        int[] arr = { 
   6, 12, 33, 87, 90, 97, 108, 561};
        System.out.println("循环查找:" + binarySearch(arr, 87));
        System.out.println("递归查找:" + binSearch(arr, 0, arr.length - 1, 87));
    }

    //循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据
    public static int binarySearch(int[] srcArray, int des) { 
   
        //定义初始最小、最大索引
        int low = 0;
        int high = srcArray.length - 1;
        //确保不会出现重复查找,越界
        while (low <= high) { 
   
            //计算出中间索引值
            int middle = (high + low) >>> 1;//防止溢出
            if (des == srcArray[middle]) { 
   
                return middle;
                //判断下限
            } else if (des < srcArray[middle]) { 
   
                high = middle - 1;
                //判断上限
            } else { 
   
                low = middle + 1;
            }
        }
        //若没有,则返回-1
        return -1;
    }

    /** * 二分查找递归实现。 * @param srcArray 有序数组 * @param start 数组低地址下标 * @param end 数组高地址下标 * @param key 查找元素 * @return 查找元素不存在返回-1 */
    public static int binSearch(int srcArray[], int start, int end, int key) { 
   
// int mid = (end - start) / 2 + start;
        int mid = (end - start) >>> 1;
        if (srcArray[mid] == key) { 
   
            return mid;
        }
        if (start >= end) { 
   
            return -1;
        } else if (key > srcArray[mid]) { 
   
            return binSearch(srcArray, mid + 1, end, key);
        } else if (key < srcArray[mid]) { 
   
            return binSearch(srcArray, start, mid - 1, key);
        }
        return -1;
    }
}

其他算法:

Java二分查找法
Java冒泡排序
Java选择排序
Java插入排序
Java希尔排序
Java计数排序
Java快排算法
Java归并排序
Java堆排序
动图演示

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129808.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最常用MySql数据库备份恢复

    最常用MySql数据库备份恢复1、数据备份类型:·完全备份:故名思议备份整个数据库·部分备份:备份一部分数据集;·增量备份:自上次备份以来的改变数据的备份;                                                ·差异备份:自上次完全备份后改变数据的备份;2、数据备份的方式:                  存储引擎支持 MyISAM  Innodb·热备份:数据库启动,…

    2022年5月22日
    40
  • matlab画圆函数

    matlab画圆函数function[]=circle(x,y,r)%画圆函数%circle(0,0,4);gridon%xy是中心,r是半径rectangle(‘Position’,[x-r,y-r,2*r,2*r],’Curvature’,[1,1])axisequal%为了修饰曲线的颜色,宽度,圈盘填充颜色等,可以设置其他参数等,例如%’edgecolor’,’b’,其中edgecolor表示边框颜色,后面的b是颜色参数值;%facecolor’,’r’,其中facecolor表示内部填

    2022年6月19日
    87
  • echarts 旭日图_sunburst图表

    echarts 旭日图_sunburst图表echarts官网中的示例如下,我们只能看到一个visualMap的属性中加了inRange,便可以出来一个渐变色的图例但往往业务需求要的图例是这种格式的先贴一个实现的效果图,铛铛啷挡~~实现这个效果我们只需要操作viralMap的color属性和categories属性即可,如下:visualMap:{left:50,top:170,dimension:2,//orient:’horizontal’,

    2022年9月26日
    0
  • tabnine idea激活码【在线注册码/序列号/破解码】「建议收藏」

    tabnine idea激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    169
  • javascript 手机号码正则表达式验证函数

    javascript 手机号码正则表达式验证函数随着手机号码段的不断增加,以前网上的手机号码验证函数都不能那么完美的支持了,这里脚本之家编辑特为大家准备的一个简单的正则与手机验证的函数分析。functioncheckMobile(){varsMobile=document.mobileform.mobile.valueif(!(/^1[3|4|5|8][0-9]\d{4,8}$/.test(sMobile))

    2022年9月17日
    0
  • 数据结构之循环队列C语言实现(详细)[通俗易懂]

    数据结构之循环队列C语言实现(详细)[通俗易懂]队列的一些说明队列的定义队列,一种特殊的线性表特点:只允许在一端输入,在另一端输出。输入端称为队尾,输出端称为队头因此,队列,又称为先进先出表(FIFO),类似于生活中的排队,先来的排在前头,后来的排在后头,一个一个办理业务。队列有两种,一种叫做循环队列(顺序队列),另一种叫做链式队列。这一篇讲的是循环队列,链式队列在另外一篇文章中循环数组循环队列使用的是数组,但是这个数组比较特别,为循环数组。为什么要使用循环数组呢?可以想象一下,假如我们使用通常的数组。那么在使用过程中,我们是从后面加

    2022年5月26日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号