JAVA二分数组搜索法

JAVA二分数组搜索法,程序举例

package JAVA_Project_01_04;//创建一个包
/*
一个数组是具有同一个数据类型的对象的集合。
二分搜索方法充分利用了元素间的次序关系,基本思想:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,
如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则只要在数组啊的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则只要在数组a的右半部继续搜索x.
二分搜索法的局限性:必须是在有序的元素中 进行的,不能在无序的元素中使用
 */
import java.util.Arrays;

public class TextArraySearch {//运用递归和二分搜索法搜索数组元素的类
    //运用递归和二分搜索法查找特定整数在整型数组中的位置
    public static int binarySearch1(int[] array, int index, int beginIndex, int endIndex) {
        int mindIndex = (beginIndex + endIndex) / 2;
        if (index < array[beginIndex] | index > array[endIndex] || beginIndex > endIndex)//判断要搜索的数字是否合理
            return -1;
        if (index < array[mindIndex]) {//搜索数字位于数组前半部分
            return binarySearch1(array, index, beginIndex, mindIndex - 1);//运用递归
        } else if (index>array[mindIndex]) {//搜索数字位于数组后半部分
            return binarySearch1(array, index, mindIndex + 1, endIndex);//运用递归
        }else {
            return mindIndex;//搜索数字位于数组中间
        }
    }
//运用非递归和二分搜索法查找特定整数在整型数组中的位置
    public static int binarySearch2(int[] array, int index) {
        int beginIndex = 0;//起始位置,指的是元素下标
        int endIndex = array.length - 1;//结束位置
        int midIndex = -1;
        if (index < array[beginIndex] || index > array[endIndex] || beginIndex > endIndex)//判断要搜索的数字是否合理
            return -1;
        //循环判断,根据起始位置与结束位置是否相等
        while (beginIndex <= endIndex) {
            midIndex = (beginIndex + endIndex) / 2;//获得数组中间的位置
            if (index < array[midIndex]) {//搜索数字位于数组前半部分
                endIndex = midIndex - 1;//重新定位结束位置
            } else if (index > array[midIndex]) {//搜索数字位于数组后半部分
                beginIndex = midIndex + 1;//重新定位起始位置
            } else {
                return midIndex;//搜索数字位于数组中间
            }
        }
        return -1;
    }

    public static void main(String[] args) {//Java主入口处
        int[]array=new int[]{12,3,2,18,24,15,20};//声明数组并初始化
        int number=18;//声明变量
        int num=1;
        //二分搜索法搜索元素之前必须对数组进行排序
        Arrays.sort(array);
        System.out.println("元素"+number+"所在的位置为:"+binarySearch1(array,number,0,array.length-1));
        System.out.println("元素"+number+"所在的位置为:"+binarySearch2(array,number));
        System.out.println("元素"+num+"所在的位置为:"+binarySearch2(array,num));
    }
}
/*
在binarySearch1()方法中,获得传递的起始位置与结束位置的中间位置作为二分点。判断搜索的数字的位置是在二分点的前面还是后面。
位于前面则搜索的数字小于位于二分点的数字,位于后面则搜索的数字大于二分点的数字。运用递归方式再调用binarySearch1()方法进行二分搜索。
在binarySearch2()方法中,设置起始位置与结束位置再获得二分点。根据起始位置与结束位置进行while()循环,
判断搜索的数字在数组二分点的数字前面还是后面。位于前面则将结束位置重新设置。位于后面则将起始位置重新设置。
*/

发布了70 篇原创文章 · 获赞 10 · 访问量 3203

猜你喜欢

转载自blog.csdn.net/JN_Cat/article/details/102576852