二分查找在java中的实现

二分查找(Binary Search)也叫作折半查找。二分查找有两个要求,一个是数列有序,另一个是数列使用顺序存储结构(比如数组)。优点是比较次数少,查找速度快,平均性能好。

本文就是给定一个数组和值,用二分查找在数组中找出该值的下标。完整代码及输出如下

import java.util.Arrays;

public class binary {
    public static void main(String[] args) {
        int[] arr = {1,5,3,6,2,7,9,10};
        int[] arr1 = sort(arr);//将分组进行排序,按升序排
        System.out.println(Arrays.toString(arr1));//将排序后的值进行输出检验。
        int pos = search(arr1,7);//用search函数实现在数组arr1中查找数值7的下标,返回给pos
        judge(pos);//判断pos的值
    }

    public static void judge(int pos) {
        if(pos == -1){
            System.out.println("所查找的值在该数组中不存在");
        }else{
            System.out.println("所查找的值在该数组中的下标为:" + pos);
        }
    }

    public static int search(int[] arr,int pos){
        int left = 0;
        int right = arr.length - 1;
        while( left <= right){
            int mid = (left + right)/2;
            if(arr[mid] == pos){
                return mid;//找到了就将下标mid的值返回
            }else if(arr[mid] < pos){
                left =mid + 1;//在mid以右区间找
            }else{
                right = mid - 1;//在mid以左区间找
            }
        }
        return -1;//若查找的数不在该数组中,则返回-1
    }
//使用选择排序
   public static int[] sort(int[] arr) {
        int temp = 0;
        for(int i = 0;i < arr.length - 1;i++){
            for(int j =  i + 1;j < arr.length;j++){
                if(arr[i] > arr[j]){
                    temp = arr[j];
                    arr[j] = arr[i];
                    arr[i] = temp;
                }
            }
        }
        return arr;
    }
}

//输出为
[1, 2, 3, 5, 6, 7, 9, 10]
所查找的值在该数组中的下标为:5

代码分解如下:

 int[] arr = {1,5,3,6,2,7,9,10};

可以看出,给定的数组是无序的,不符合二分查找的要求,所以首先对该数组进行排序。

       int[] arr1 = sort(arr);//使用sort函数,将分组进行排序,按升序排

        //使用选择排序
public static int[] sort(int[] arr) {
     int temp = 0;
     for(int i = 0;i < arr.length - 1;i++){
         for(int j =  i + 1;j < arr.length;j++){
             if(arr[i] > arr[j]){
                 temp = arr[j];
                 arr[j] = arr[i];
                 arr[i] = temp;
             }
         }
     }
     return arr;
 }

输出为

  System.out.println(Arrays.toString(arr1));//将排序后的值进行输出检验。
[1, 2, 3, 5, 6, 7, 9, 10]//输出结果

此时,数组已按升序的顺序进行排列,可以使用二分查找了。

    int pos = search(arr1,7);//用search函数实现在数组arr1中查找数值7的下标,返回给pos

调用search函数实现二分查找

    public static int search(int[] arr,int pos){
     int left = 0;//左端点为0,下标从0开始的
     int right = arr.length - 1;//右端点为数组的长度-1,数组长度是从1开始的
     while( left <= right){
         int mid = (left + right)/2;
         if(arr[mid] == pos){
             return mid;//找到了就将下标mid的值返回
         }else if(arr[mid] < pos){
             left =mid + 1;//在mid以右区间找
         }else{
             right = mid - 1;//在mid以左区间找
         }
     }
     return -1;//若查找的数不在该数组中,则返回-1
 }

二分查找在java中的实现_第1张图片

接着判断pos的值:

        judge(pos);//判断pos的值
        
   public static void judge(int pos) {
        if(pos == -1){
            System.out.println("所查找的值在该数组中不存在");
        }else{
            System.out.println("所查找的值在该数组中的下标为:" + pos);
        }
    }

你可能感兴趣的:(Java,java)