关闭

递归二分法查找

192人阅读 评论(0) 收藏 举报

二分法使用了折半查找的思想,不断的变化,数组下标的起始位置(begin)和终止位置(end)来进行搜索。

前提:二分法查找的前提是数组必须是有序的(如果包含重复值,将输出第一个值得下标)

我们使用两种算法,解决二分查找:

public class Solution {
//给定一个数组,数组里面下标加起来等于 给定的目标数字,求下标
public static void main(String[] args) {
Solution solution=new Solution();
int[] number = {1,2,3,4,5,7,9,11,18,23,56,100,201,202};
System.out.println(solution.sort(number, 0, number.length, 56));
System.out.println(solution.otherBinarySearch(number, 0, number.length, 56));
}
//递归的思想
public int sort(int[] number,int begin,int end,int index) {
    int middle=(begin+end)/2;
    if(begin>end){
        return -1; //没有找到返回
    }else if(number[middle]==index){
        return middle; //找到返回
    }else if(index>number[middle]){//比中间这个值大,begin+1
        return sort(number,middle+1,end, index);
    }else if(index<number[middle]){//比中间值小 end-1;
        return sort(number, begin, middle-1, index);
    }else {
        return -1;
    }
    
}

//采用非递归的算法
public int otherBinarySearch(int[] number, int begin, int end, int index) {
    while(begin<=end){
        int mindle=(begin+end)/2;
        if(number[mindle]>index){
            end--;
        }else if(number[mindle]<index){
            begin++;
        }else if(number[mindle]==index){
            return mindle;
        }
    }
    return -1;
    
}

}

0
0
查看评论

实现二分法查找(递归实现)

递归实现二分法查找:#include #include void main(){ int doubleCheck(int a, int b, int c, int d[]); int d[] = { 1, 2, 3, 4, 5, 6 }; int x = doubleCheck(0,5,...
  • haha_kai
  • haha_kai
  • 2016-11-27 09:12
  • 816

使用递归实现二分法查找

#include "stdio.h" void Search(int p[],int low,int height,int key) { int middle=(low+height)/2; if(low>height) { printf("没有该数!...
  • WANGYAN9110
  • WANGYAN9110
  • 2012-03-20 00:40
  • 6662

二分法查找递归方式()

今天在这个二分法递归查找的算法上想了好久,记下来 1 package day04; 2 public class test9 { 3 public static void main(String[] args) { 4 // 3.使用二分法查找有序数组中元素。找到返...
  • xjy9266
  • xjy9266
  • 2017-03-10 09:50
  • 640

递归和非递归两种方式实现二分法查找(java)

public class BinarySearch { public static void main(String[] args) { int[] arr = {1,3,5,7,9,11,13,15,17}; System.out.println(search(arr,13)); ...
  • u014430697
  • u014430697
  • 2015-11-21 22:13
  • 2730

二分法查找(递归和非递归)

二分法的前提是:集合中的元素是按一定规则排序的。对List中的String排序,以及二分法实现示例:package test;import java.util.ArrayList; import java.util.Collections;public class TestBinarySearch ...
  • u013325266
  • u013325266
  • 2016-09-06 16:45
  • 161

Binary Search二分法搜索递归和非递归C++程序

二分法基本上学计算机的都听过,但是有人不知道的就是其实二分法是减治法的思想。 所谓减治法和分治法有一个主要差别就是减治法是减去一般,就是分治之后只需要解决原问题的一半就可以了得到全局问题的解了。所以速度很快。 下面是二分法的递归程序和非递归程序和主测试程序: #include #include us...
  • kenden23
  • kenden23
  • 2013-11-14 10:22
  • 4070

C 递归二分法查找

二分法使用了折半查找的思想,不断的变化,数组下标的起始位置(begin)和终止位置(end)来进行搜索。 前提:二分法查找的前提是数组必须是有序的(如果包含重复值,将输出第一个值得下标) 我们使用两种算法,解决二分查找: public class Solution { //给定...
  • qq_29233719
  • qq_29233719
  • 2017-01-05 20:41
  • 106

二分法快速查找的递归算法

http://www.cnblogs.com/darejoy/archive/2010/05/27/1745871.htmlprivate static int find(int[] arySource, int target, int start, int end){  ...
  • wag2765
  • wag2765
  • 2016-01-25 16:45
  • 706

递归-----二分法查找

递归是一个看起来简单的概念:所有调用自己的例程都是递归。尽管看起来很简单,但是理解起来并且应用递归可能相当复杂。本次博主写的内容是关于二分法查找的内容。我记得我之前写过一个二叉树的遍历就是利用递归的。气势二分法和二叉树很相似,所以如果需要查找,大家也是可是可以选择递归去做。 问题描述; 实现一个函数...
  • zuoshengting
  • zuoshengting
  • 2017-07-03 13:43
  • 124

Python 二分法查找

1.如果找到该值就返回 2.如果找不到该值就返回该值的上一个Index和下一个Index 3.小于List[0] 返回0 4.大于len(List)返回该List[-1] def BinarySearch(keyTime,List): low = 0 high =...
  • swiftshow
  • swiftshow
  • 2012-03-22 15:17
  • 2909
    个人资料
    • 访问:61449次
    • 积分:2397
    • 等级:
    • 排名:第18279名
    • 原创:179篇
    • 转载:46篇
    • 译文:1篇
    • 评论:0条