二分查找(折半查找)BinarySearch
二分查找
一组排好顺序的数,查找其中的一个数(value)的位置,按照数组(int[] a)存放这组数据,数组的索引所指的位置就是需要查找的数,用三个变量来存储数组中的第一个位置(start),最后一个位置(end)和中间位置(mid)的索引。每查找一次,就用中间位置(mid)索引所表示的数组值来与所需要查找的数(value)相比较,若中间索引处的数值(a[mid])大于需要查找的数值(value),则将查找范围放到前半部分查找(即令最后一个位置的索引移到中间索引的前一个位置【end = mid-1】),若中间索引的数组(a[mid])小于需要查找的数值(value)),则将查找范围放到后半部分查找(即令第一个位置的索引移到中间索引的后一个位置【start = mid+1】)。
1 package cn.sxt.oo; 2 3 import java.util.Arrays; 4 import java.util.Scanner; 5 6 /** 7 * 测试二分查找 8 * @author Trista 9 *10 */11 public class BinarySearch1 {12 public static void main(String[] agrs) {13 int[] a = {12,45,98,76,56,4,5,7,1,0,13,99,66};14 Scanner sc = new Scanner(System.in);15 System.out.println("请输入要查找的数字:");16 int value = sc.nextInt();17 Arrays.sort(a);18 load(value,a);19 20 21 }22 23 public static void load(int value,int[] b) {24 int begin = 0;25 int last = b.length-1;26 boolean flag = true; 27 while(last>=begin) {28 int mid = (begin+last)/2;29 if(value==b[mid]) {30 flag = false;31 System.out.println("按从小到大,该值的在数值中为第"+(mid+1)+"位");32 }33 if(value>b[mid]) {34 begin = mid+1;35 }else {36 last =mid-1;37 }38 }39 if(flag) {40 System.out.println("该值不存在");41 } 42 }43 }