二分查找(折半查找)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 }