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

    使用循环实现&使用递归实现

    package com.pt.spring.learn.bean;
    
    import java.util.ArrayDeque;
    import java.util.Queue;
    
    public class BinFind {
        public static void main(String[] args) {
            int[] array = new int[]{1, 2, 3, 4, 5, 7, 8, 9, 10};
            System.out.println(binFind(array, 0, 8, 8));
            System.out.println(binSearchLoop(array, 0, 8, 9));
        }
    
        public static int binSearchLoop(int[] array, int startIndex, int endIndex, int objectValue) {
            Queue<int[]> paramsQueue = new ArrayDeque<>();
            paramsQueue.add(new int[]{startIndex, endIndex});
            while (!paramsQueue.isEmpty()) {
                int[] tmpParams = paramsQueue.poll();
                startIndex = tmpParams[0];
                endIndex = tmpParams[1];
                if (objectValue > array[endIndex] || objectValue < array[startIndex] || startIndex > endIndex) {
                    return -1;
                }
                if (startIndex == endIndex && array[endIndex] != objectValue) {
                    return -1;
                }
    
                int mid = (startIndex + endIndex) / 2;
                if (array[mid] == objectValue) {
                    return mid;
                }
    
                if (array[mid] > objectValue) {
                    paramsQueue.add(new int[]{startIndex, mid});
                } else {
                    paramsQueue.add(new int[]{mid + 1, endIndex});
                }
            }
            return -1;
        }
    
        public static int binFind(int[] array, int startIndex, int endIndex, int objectValue) {
            if (objectValue > array[endIndex] || objectValue < array[startIndex] || startIndex > endIndex) {
                return -1;
            }
            if (startIndex == endIndex && array[endIndex] != objectValue) {
                return -1;
            }
    
            int mid = (startIndex + endIndex) / 2;
            if (array[mid] == objectValue) {
                return mid;
            }
    
            if (array[mid] > objectValue) {
                return binFind(array, startIndex, mid, objectValue);
            } else {
                return binFind(array, mid + 1, endIndex, objectValue);
            }
        }
    
    
    }

    树表查找,包括二叉搜索树的构建与元素查找;

    package com.pt.spring.learn.bean;
    
    /**
     * 二叉查找树:
     * 某节点如果左子树不为空,左子树上所有节点的值都小于该节点的值
     * 如果右子树不为空,右子树上所有节点的值都大于该节点的值
     * 左右子树也都是二叉查找树
     */
    public class BinarySearchTree {
        public static void main(String[] args) {
            System.out.println("-----start run----");
            int[] array = new int[]{8, 6, 9, 7, 1, 3, 5};
            //构建二叉查找树
            Node root = null;
            for (int i = 0; i < array.length; i++) {
                root = insert(root, array[i]);
            }
            System.out.println(root);
    
            //查找
            Node get = searchNode(root, 90);
            System.out.println(get);
    
        }
    
        static Node searchNode(Node root, int data) {
            if (root == null) {
                return null;
            }
            if (root.value == data) {
                return root;
            }
    
            if (root.value > data) {
                return searchNode(root.leftNode, data);
            } else {
                return searchNode(root.rightNode, data);
            }
        }
    
        static Node insert(Node root, int data) {
            if (root == null) {
                return new Node(data);
            }
            if (root.value >= data) {
                root.leftNode = insert(root.leftNode, data);
            } else {
                root.rightNode = insert(root.rightNode, data);
            }
            return root;
        }
    
        static class Node {
            Integer value;
            Node leftNode;
            Node rightNode;
    
            public Node(Integer value) {
                this.value = value;
            }
    
            @Override
            public String toString() {
                return "{" +
                        ""value":" + value +
                        ", "leftNode":" + leftNode +
                        ", "rightNode":" + rightNode +
                        '}';
            }
        }
    }
  • 相关阅读:
    redis主从架构
    redis持久化
    git 首次push失败
    Java8 CompletableFuture
    Mac Item2自动远程连接服务器
    Java8 日期和时间类
    【LeetCode】31. 下一个排列
    【LeetCode】30. 串联所有单词的子串
    【LeetCode】29. 两数相除
    【LeetCode】28. 实现 strStr()
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/9886337.html
Copyright © 2011-2022 走看看