数组元素查找之二分查找/折半查找

提示:用这个的话,数组中的元素需满足从低到高已经排序好的条件(这个可以用冒泡等排序来完成)
例子代码:

package 二分查找;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-18-21
 */
public class Demo {

    public  static void maopao(int[] num){
        int temp;
        for(int i=0;i<num.length;i++){
            for(int n=0;n<num.length-1-i;++n){
                if(num[n]>num[n+1]){
                    temp=num[n];
                    num[n]=num[n+1];
                    num[n+1]=temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] nums = {11,19,12,16,13,17,14};
        //用冒泡排下序
        maopao(nums);
        //检测排序是否成功
        for(int i=0;i<nums.length;i++){
            System.out.print(nums[i]+"\t");
        }
        //
        int key = 13;//要查找的数
        int max = nums.length-1;//最大值的下标
        int min = 0;//最小值的下标
        int mid = -1;//中间值索引
        //使用二分查找法查找(注意循环的条件->提示最多是:min==max==mid的时候如果再找不到必然min>max或者max<min->一样)
        while(min<=max) {
            mid = (max + min) / 2;
            if (nums[mid] > key) {
                //说明:想要查找的数再左边
                //需要重新赋值max的值
                max = mid - 1;
            } else if (nums[mid] < key) {
                //说明:想要查找的数再右边
                //需要重新赋值min的值
                min = mid + 1;
            }else if(nums[mid] == key){
                break;
            }
        }

        if(min>max){
            System.out.println("这个数不存在数组中");
        }else{
            System.out.println("这个数存在数组中是第"+(mid+1)+"个~");
        }
    }
}

posted @ 2021-10-21 19:23  ╰(‵□′)╯  阅读(51)  评论(0编辑  收藏  举报