zoukankan      html  css  js  c++  java
  • 二分法查找数组中元素

    要使用二分法需要注意:  数组中的元素必须已经按升序排列好

    二分法主要思想是将一个数组一分为二,每次查询都能将查询范围在上一次的基础上缩小一半。所以效率非常高。

    下面是Java代码实现:

    import java.util.*; 
    
    public class Main
    {
    
        public static void main(String[] args) throws Exception
        {
            Integer[] numbers = new Integer[] 
            {
                    1,3,2,1,2,3,2,7,7,8,2
            };
            Integer target = 7;
            Integer head = 0;
            Integer tail = numbers.length - 1;
            Integer middle = (head + tail)/2;
            
            Arrays.sort(numbers); 
            for(Integer item : numbers)
                System.out.print(item + " ");
            System.out.println();
            Integer targetIndex = dichotomySearch(numbers,head,middle,tail,target);
            if(targetIndex == null)
                System.out.println("target not found");
            else
                System.out.println("target in: " + targetIndex);
        }
        
        public static Integer dichotomySearch(Integer[] numbers,Integer head, Integer middle,Integer tail,Integer target)
        {
            //System.out.println("head:" + head + " middle:" + middle + " tail:" + tail);
            if(target.equals(numbers[head]))
                return head;
            if(target.equals(numbers[middle]))
                return middle;
            if( target.equals(numbers[tail]))
                return tail;
            
            
            if(head.equals(middle) || head.equals(tail)||middle.equals(tail))
                return null;
            
            if(target.compareTo(numbers[head]) > 0 && target.compareTo(numbers[middle]) < 0)
            {
                System.out.println("A");
                tail = middle;
                middle = (head + tail)/2;
            }
            else if(target.compareTo(numbers[middle]) > 0 && target.compareTo(numbers[tail]) < 0)
            { 
                head = middle;
                middle = (head + tail)/2; 
            }
            else
            {
                return null;
            }
            
            return dichotomySearch(numbers, head,  middle, tail, target);
        } 
    }

    输出结果:

    1 1 2 2 2 2 3 3 7 7 8
    target in: 8

  • 相关阅读:
    下面这段java的源代码的意思
    Swing高级JInternalFrameTest内部窗体
    (转)为什么水平滚动条显示不了
    创建主窗体(转)
    javax.swing.JOptionPane.showMessageDialog() 方法
    Java图形界面设计
    java 做项目时遇到的一些问题
    selectmethod=cursor的含义及其使用
    java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;
    10.24
  • 原文地址:https://www.cnblogs.com/kuillldan/p/5701338.html
Copyright © 2011-2022 走看看