zoukankan      html  css  js  c++  java
  • Java二分查找法

    基本思路:

    1、提示用户输入数字,接受该数字。

    2、利用随机数生成一组数。

    3、冒泡排序。(因为二分法只适用于有序数列)

    4、利用二分法查找该数

       (1)、计算出数组的中间位置,具体方法是开始位置的索引加上结束位置的索引除以二;

       (2)、取出中间位置的值和要查找的数字比较,根据比较结果决定,根据查找结果决定下一查找的部分;

               1)、如果中间位置的值等于要查找的数字-----输出结果

               2)、如果中间位置的值大于要查找的数字-----结束索引-1

               3)、如果中间位置的值小于要查找的数字-----开始索引+1

               4)、循环一直到开始索引大于结束索引相同为止

       (3)、下一查找部分中间位置同样用开始位置的索引加上结束位置的索引除以二;

       //用户输入数字
                    System.out.println("请输入要查询的数字");
    		Scanner sc=new Scanner(System.in);
    		int chazhao=sc.nextInt();
    		
    		//前提条件:有序数组 
    		
    		//1、生成随机数组
    		Random a=new Random();
    		int[] ary=new int[10];
    		for(int i=0;i<ary.length;i++)
    		{
    			ary[i]=a.nextInt(100);
    		}
    		
    		//2、冒泡排序
    		
    		for(int i=0;i<ary.length-1;i++)
    		{
    			for(int j=0;j<ary.length-1;j++)
    			{
    				if(ary[j]>ary[j+1])
    				{
    				  int t = ary[j];
    				  ary[j]=ary[j+1];
    				  ary[j+1]=t;
    				}
    			}
    		}
    	    for(int k:ary)
    	    {
    	    	System.out.print(k+"  ");
    	    }
    		
    		//3、二分查找
                int jishu=0;    //定义计数器
    	    int start=0;   //开始位置的索引
    	    int end=ary.length;    //结束位置的索引
    	    int zhong=0;  //定义一个变量作为中间位置的索引
    	    while(true)
    	    {
    	    	zhong=(start+end)/2;    //中间位置索引等于开始位置索引加结束位置索引除以二
    	    	jishu++;      //计数器加一
    	    	if(ary[zhong]==chazhao)
    	    	{
    	    		System.out.println("找到了,共查找了"+jishu+"次");
    	    		break;
    	    	}
    	    	else if(ary[zhong]>chazhao)
    	    	{	    		
    	    		end=zhong-1;
    	    	}
    	    	else
    	    	{	    		
    	    		start=zhong+1;
    	    	}
    	    	if(start>end)
    	    	{
    	    		System.out.println("没有找到该数");
    	    		break;
    	    	}
    	    }
    

      

    运行结果:

  • 相关阅读:
    bzoj 2001 CITY 城市建设 cdq分治
    CodeChef
    CodeForces 293E Close Vertices 点分治
    CodeForces 161D Distance in Tree 树上点分治
    POJ-2104 K-th Number CDQ分治
    CodeForces 669 E Little Artem and Time Machine CDQ分治
    BZOJ 1935 园丁的烦恼
    关于dijkstra的优化 及 多源最短路
    nyoj1000_快速幂_费马小定理
    Common Knowledge_快速幂
  • 原文地址:https://www.cnblogs.com/mutougezi/p/5489571.html
Copyright © 2011-2022 走看看