博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分算法
阅读量:2338 次
发布时间:2019-05-10

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

二分算法

基本介绍:二分算法仅仅只能对已经排过序的序列进行查找,每一次和中间值进行比对,根据比对结果进行筛选。

二分查找

非递归的形式

//二分查找的非递归实现    /**     *     * @param arr 待查找的数组     * @param target 需要查找的目标     * @return 返回对应的下标,-1表示没有找到     */    public static int binarySearch(int[] arr,int target){
int left = 0; int right = arr.length - 1; int mid = (left + right) / 2; while (left < right){
if(arr[mid] == target){
return mid; }else if(arr[mid] > target){
right = mid - 1; }else{
left = mid + 1; } mid = (left + right) / 2; } return -1; }}

递归的形式

//二分查找的递归实现    /**     *     * @param arr 对应需要操作的数组     * @param target 对应需要寻找的目标     * @return 返回对应的目标的索引     */    public static int binary(int[] arr,int target){
if (arr == null){
return -1; }else{
return binary(0,arr.length - 1,arr,target); } } /** * * @param left 数组搜索的左极限 * @param right 数组搜索的右极限 * @param arr 对应的需要操作的目标数组 * @param target 需要查找的目标值 * @return */ public static int binary(int left,int right,int[] arr,int target){
int mid = (left + right) / 2; if(right > left){
if(arr[mid] == target){
return mid; }else if(arr[mid] > target){
right = mid - 1; return binary(left,right,arr,target); }else{
left = mid + 1; return binary(left,right,arr,target); } }else{
return -1; } }

分析与总结

  1. 递归和循环的终止条件都是两个,找到对应的数据,返回对应的索引;或者是没有找到,到头了,到头的终止条件是左限大于右限。
  2. 递归本身就是另外一种循环的开始

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

你可能感兴趣的文章
微服务监控模块springboot Admin
查看>>
安全模块springboot security
查看>>
springcloud gateway
查看>>
drools使用记录
查看>>
阿里六面,挂在hrg,我真的不甘心!
查看>>
人生的康波周期,把握住一次,足以改变命运!
查看>>
互联网公司那些价值观-阿里巴巴
查看>>
去面试快手,问了我很多消息队列的知识!
查看>>
图解LeetCode No.18之四数之和
查看>>
402. Remove K Digits
查看>>
75. Sort Colors
查看>>
获取数组中前K小的数字
查看>>
数组heapify变为堆结构
查看>>
二叉树的非递归遍历
查看>>
218. The Skyline Problem
查看>>
Java PAT (Basic Level) Practice 写出这个数
查看>>
Python PAT (Basic Level) Practice 1016 部分A+B
查看>>
Python PAT (Basic Level) Practice 1006 换个格式输出整数
查看>>
Python PAT (Basic Level) Practice 1009 说反话
查看>>
Python PAT (Basic Level) Practice 1011 A+B 和 C
查看>>