二分查找算法(JAVA)

Posted Java野生程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找算法(JAVA)相关的知识,希望对你有一定的参考价值。


1.二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 

2.算法要求:

(1)必须采用顺序存储结构 

(2)必须按关键字大小有序排列

3.查找过程

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

4.实现方式:二分查找的实现用递归和循环两种方式

5.代码如下

import java.util.Arrays;

/**
 * 二分查找
 */

public class BinarySearchTree {
    /**
     * 非递归二分查找
     */

    public static int binarySearch(int num[], int number) {
        if (num == null || num.length == 0) {
            return -1;
        }
        int start, end, mid;
        start = 0;
        end = num.length - 1;
        while (start <= end) {
            mid = (start + end) / 2;
            if (num[mid] == number){
                return mid;
            }
            else if (num[mid] > number) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
        }
        return -1;
    }

    /**
     * 递归查找
     */

    public static int RecursivebinarySearch(int num[], int start, int end, int key) {
        int mid = (start + end) / 2;
        if (num == null || num.length == 0 || key < num[start] || key > num[end]) {
            return -1;
        } else if (num[mid] > key) {
            return RecursivebinarySearch(num, start, mid - 1, key);
        } else if (num[mid] < key) {
            return RecursivebinarySearch(num, mid + 1, end, key);
        } else {
            return mid;
        }

    }

    public static void main(String[] args) {
        int num[] = { 13567910 };
        Arrays.sort(num);
        System.out.println(binarySearch(num, 7));
        System.out.println(RecursivebinarySearch(num, 0, num.length - 17));
    }
}


如果您喜欢,分享一下让更多的人学习

请点击标题下方的“Java野生程序猿”添加关注

或者长按下方的二维码添加关注


以上是关于二分查找算法(JAVA)的主要内容,如果未能解决你的问题,请参考以下文章

java泛型 二分查找

[Algorithm]二分插值斐波那契查找算法 Java 代码实现

[Algorithm]二分插值斐波那契查找算法 Java 代码实现

Java学习之二分查找算法

Day589.二分查找(非递归) -数据结构和算法Java

Java八股文面试题 基础篇 -- 二分查找算法冒泡排序选择排序插入排序希尔排序快速排序