博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java数据结构和算法-二分查找
阅读量:2445 次
发布时间:2019-05-10

本文共 1636 字,大约阅读时间需要 5 分钟。

二分查找:

  二分查找又称折半查找,它是一种效率较高的查找方法。

  二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。

二分查找递归和非递归Java实现:

package com.algorithm.search;import com.algorithm.sort.BasicSort;public class BinarySearch {    public static void main(String[] args) {        int[] a={3,4,5,1,98,45,34,27,49,6,78};        int low=0;        int high=a.length-1;        int elem=45;        BasicSort b=new BasicSort();        b.basicSort(a);        for(int num:a){            System.out.print(" "+num);        }//        binarySearch(a,elem,low,high);        directbinarySearch(a,elem,low,high);    }    /**     *递归二分查找     */    public static int binarySearch(int[] a,int elem,int low,int high) {        if (low <=high) {            int mid = (low + high) / 2;            if (a[mid] == elem) {                System.out.println("递归二分查找找到该元素对应的下表:" + mid);                return mid;            }            if (a[mid] > elem) {                return binarySearch(a, elem, low, mid - 1);            }            if (a[mid] < elem) {                return binarySearch(a, elem, mid + 1, high);            }        }        return -1;    }    /**     * 非递归二分查找     */    public static int directbinarySearch(int[] a,int elem,int low,int high) {        while(low<=high){            int mid = (low + high) / 2;            if(a[mid] == elem){                System.out.println("非递归二分查找找到该元素对应的下表:" + mid);                return mid;            }            if (a[mid] > elem) {                high=mid-1;            }            if(a[mid] < elem){                low=mid+1;            }        }        return -1;    }}输出: 1 3 4 5 6 27 34 45 49 78 98非递归二分查找找到该元素对应的下表:7

 

转载地址:http://irpqb.baihongyu.com/

你可能感兴趣的文章
使用Webtask.io构建无服务器MERN Story应用程序-部署零:1
查看>>
使用Webtask.io构建无服务器的MERN Story应用程序-部署零:2
查看>>
firebase vue_Firebase Cloud Firestore入门:构建Vue联系人应用
查看>>
node.js hapi_使用Hapi使用JavaScript异步构建安全的Node.js应用程序
查看>>
javascript入门_Netlify入门:部署JavaScript应用程序的最简单方法
查看>>
react hooks使用_使用React Hooks将React类组件转换为功能组件的5种方法
查看>>
使用Node.JS,React,Redux和Redux-saga Part3:身份验证构建Retrogames存档
查看>>
使用Node.JS,React,Redux和Redux-Saga Part2:Redux集成构建Retrogames存档。
查看>>
使用Selenium WebDriver测试Flask应用程序-第1部分
查看>>
python circle_与Python和Circle CI的持续集成
查看>>
react apollo_React with Apollo中的实时GraphQL UI更新。
查看>>
express react_在30分钟内使用Express.js构建博客并进行React
查看>>
构建express_15分钟内在Express中构建简单身份验证
查看>>
覆盖vue.js样式_使用Vue.js和Cloudinary在化身上覆盖眼镜/面罩
查看>>
js 迭代器 异步_异步迭代器和生成器入门
查看>>
vs 部署 azure_使用VS Code的Azure函数入门:零部署
查看>>
graphql-go_GraphQL-好与坏
查看>>
bitcoin_使用Node,Coinbase,Bitcoin和Okta构建自己的发票服务
查看>>
filestorm超级节点_带有节点的超级简单GraphQL
查看>>
vue避免使用mixins_用Mixins扩展Vue组件
查看>>