数据结构-二分查找法(Data structure – binary search method)

public class SequenceSearch02 {    public static void main(String[] args) {        /*  请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,            输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。*/        /*思路分析:        * 当数组个数为奇数时:        * 1.先定义一个数组 int[] nums={1,8, 10,33, 89, 1000, 1234}        * 2.定义 下标low:0,上标height:6 middle指针为:(low+middle)/2        * 3.定义 要查找的数为x=29        *   第一轮:low:0,上标:6 middle:(low+middle)/2为下标[3]的数=33   因为:x<33 所以范围向下半区缩小 low:0,height:middle-1=[2]=10 middle=[1]=8        *   第二轮:low:0,height:middle-1=[2]=10 middle=[1]=8 因为:x>middle 所以范围向上半区缩小 low=middle+1=[2]=10 h[2]=10 middle=[2]=10        *   第三轮:x>middle 所以low=middle+1=[3]=89 low大于height 退出循环        *        * 当数组个数为偶数时:{1,8, 10, 89, 1000, 1234} x=1234        * 1.先定义一个数组 int[] nums={1,8,10,89,1000,1234}        * 2.定义 下标low:[0],上标height:[5] middle指针为:(low+middle)/2=[2]=10        * 3.第一轮:进行判断  因为x>middle 所以low=middle+1=[3]=89 上标height:[5] middle=[4]=1000        *   第二轮:进行判断  因为x>middle[4] 所以low=middle+1=[5]=1234 middle=(5+5)/2=[5]=1234        *   第三轮:进行判断  因为x=middle  break        * */        int[] nums={1,8,10,89,1000,1234};        int low=0;        int height=nums.length-1;        int middle=(low+height)/2;        int x = 1234;        int temp=0;        int count=0;//        遍历数组        while(low <= height){            count++;            if (x == nums[middle]){                System.out.println("查找值为:"+x+"的数"+"\n已在数组中找到该数,值为:"+nums[middle]+"下标为:"+middle);                temp = 1;                break;            } else if (x >  nums[middle]){                low = middle + 1;                middle=(low+height)/2;            }            else {                height = middle - 1;                middle=(low+height)/2;            }        }        if (temp == 0){            System.out.println("没有查找到该数");        }        System.out.println("共进行了"+count+"次查找");    }}
————————
public class SequenceSearch02 {    public static void main(String[] args) {        /*  请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,            输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。*/        /*思路分析:        * 当数组个数为奇数时:        * 1.先定义一个数组 int[] nums={1,8, 10,33, 89, 1000, 1234}        * 2.定义 下标low:0,上标height:6 middle指针为:(low+middle)/2        * 3.定义 要查找的数为x=29        *   第一轮:low:0,上标:6 middle:(low+middle)/2为下标[3]的数=33   因为:x<33 所以范围向下半区缩小 low:0,height:middle-1=[2]=10 middle=[1]=8        *   第二轮:low:0,height:middle-1=[2]=10 middle=[1]=8 因为:x>middle 所以范围向上半区缩小 low=middle+1=[2]=10 h[2]=10 middle=[2]=10        *   第三轮:x>middle 所以low=middle+1=[3]=89 low大于height 退出循环        *        * 当数组个数为偶数时:{1,8, 10, 89, 1000, 1234} x=1234        * 1.先定义一个数组 int[] nums={1,8,10,89,1000,1234}        * 2.定义 下标low:[0],上标height:[5] middle指针为:(low+middle)/2=[2]=10        * 3.第一轮:进行判断  因为x>middle 所以low=middle+1=[3]=89 上标height:[5] middle=[4]=1000        *   第二轮:进行判断  因为x>middle[4] 所以low=middle+1=[5]=1234 middle=(5+5)/2=[5]=1234        *   第三轮:进行判断  因为x=middle  break        * */        int[] nums={1,8,10,89,1000,1234};        int low=0;        int height=nums.length-1;        int middle=(low+height)/2;        int x = 1234;        int temp=0;        int count=0;//        遍历数组        while(low <= height){            count++;            if (x == nums[middle]){                System.out.println("查找值为:"+x+"的数"+"\n已在数组中找到该数,值为:"+nums[middle]+"下标为:"+middle);                temp = 1;                break;            } else if (x >  nums[middle]){                low = middle + 1;                middle=(low+height)/2;            }            else {                height = middle - 1;                middle=(low+height)/2;            }        }        if (temp == 0){            System.out.println("没有查找到该数");        }        System.out.println("共进行了"+count+"次查找");    }}