用二分法查找数组中的下标

来源:互联网 发布:鬼真实存在吗 知乎 编辑:程序博客网 时间:2024/05/21 10:34

这个小示例可以进行重复测试,方便多次使用,效果明显!

package cn.wwz.test;import java.util.Arrays;import java.util.Random;import java.util.Scanner;/** * 使用二分法查找元素下标 * @Author WWZ * @Date 2017-11-21下午2:40:25 */public class Two {    public static void main(String[] args) {        int[] arr = new int[20];        //生成数组的大小--可以更换为其它数值        Random ra = new Random();        Scanner sc = new Scanner(System.in);        int j = 0;        for (int i = 0; i < arr.length; i++) {            arr[i] = ra.nextInt(100);   //生成100以内的随机数        }        Arrays.sort(arr);   //将数组排序        for (int i = 0; i < arr.length; i++) {            System.out.print(arr[i]+"\t");            j++;            if(j%10==0){                System.out.println();            }        }        while(true){            System.out.println("请输入您想要查看的数字:");            int num = 0;            try{                num = Integer.valueOf(sc.next());            }            catch(Exception e){                System.out.println("请输入正确的数字");                System.out.println();                continue;            }            int begin = 0;            int end = arr.length-1;            boolean flag = false;            while(begin<=end){                int middle = (begin+end)/2;                if(num>arr[middle]){                    begin = middle + 1;                }                else if(num<arr[middle]){                    end = middle - 1 ;                }                if(num == arr[middle]){                    flag = true;                }                if(flag){                    System.out.println("下标为:" + middle);                    break;                }            }            if(!flag){                System.out.println("对不起没找到你想要的");                System.out.println();            }        }    }}
原创粉丝点击