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

    /**
     *  有序数组 中 查找某一特定元素 的搜索算法
     *
     *  时间复杂度:折半搜索每次把搜索区域减少一半,时间复杂度为O(log n)。(n代表集合中元素的个数)
        空间复杂度: O(1)。虽以递归形式定义,但是尾递归,可改写为循环。
     */
    public class binarySearch {
        public static void main(String[] arg) {
            int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
            //递归方式
            System.out.println("index:"+recurrence(array,0,array.length-1,555));
            //非递归方式
            System.out.println("index:"+NotRecurrence(array,9232));
        }
    
        private static int NotRecurrence(int[] array,int key) {
            int low = 0;
            int high=array.length-1;
            while (low <= high) {a
                int mid = low+(high-low)/2;//(low+high)/2存在溢出风险
                if (array[mid] > key) {
                    high=mid-1;
                } else if (array[mid] < key) {
                    low = mid + 1;
                } else {
                    return mid;
                }
            }
            return -1;
        }
    
        private static int recurrence(int[] array,int low,int high,int target) {
            if (low > high) {
                return -1;
            }
            int mid = low+(high-low)/2;
            if (array[mid] > target) {
                return recurrence(array, low, mid - 1, target);
            }
            if (array[mid] < target) {
                return recurrence(array, mid + 1, high, target);
            }
            return mid;
        }
    }
    
    
  • 相关阅读:
    scrapy-redis 分布式爬虫
    爬虫-框架-Scrapy
    MongoDB
    爬虫-请求库之-selenium
    通过位异或来交换a,b的值和通过中间变量交换a,b的值
    位运算
    sizeof运算符
    运算符和表达式(类型转换)
    为什么计算机存储的是二进制补码?
    各种进制的学习与转换
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/10532018.html
Copyright © 2011-2022 走看看