常用查找算法

顺序查找

  • 适合于存储结构为顺序存储或链接存储的线性表。顺序查找也称为线形查找,属于无序查找算法

    public static int orderLookUp(int[] nums,int num){
        for (int i = 0; i < nums.length; i++) {
            if (num==nums[i]) {
                return i;
            }
        }
        return -1;
    }
    
  • 复杂度:O(n)

二分查找

  • 前提:有序,物理连续(能够随机访问)

    public static int halfLookUp(int[] nums, int num) {
        int start = 0;
        int end = nums.length - 1;
        SortAlgorithm.quickSwap(nums, 0, end);
        for (int i = 0; i < nums.length; i++) {
            if (num == nums[i]) {
                return i;
            }
        }
        int mid;
        while (start <= end) {
            mid = (start + end) / 2;
            if (nums[mid] < num) {
                start = mid + 1;
            } else if (nums[mid] > num) {
                end = mid - 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
    
  • 数据已经有序排放在数组中,通过将待查的元素与数组最中间元素进行对比,如果大于中间值,则目标值可能存在于右半部分,否则可能在左半部分,查到为止

二分查找扩展

  • 插值

    基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,差值查找也属于有序查找。

    注意:对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好的多。反之,数组中如果分布非常不均匀,那么插值查找未必是很合适的选择。

    复杂度:O(log2(log2n))

  • 斐波那契

    也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。同样地,斐波那契查找也属于一种有序查找算法

树型查找

  • 二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值
  • 破坏原有结构
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 冒泡排序-Bubble 记录当前需比较的个数 从一端开始比较,将最大(最小)的数据移至另一侧,比较个数减一 ...
    Shimmer_阅读 3,203评论 0 4
  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 6,669评论 0 3
  • 目录 1. 栈和队列1.用两个队列实现栈2.用两个栈实现队列3.实现一个栈,可以用常数级时间找出栈中的最小值4.判...
    MigrationUK阅读 8,173评论 4 20
  • 目录 1 左神部分集锦 2 Leetcode前150题 3 牛客网剑指offer 4 JavaG 5 题目中的...
    小小千千阅读 5,034评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,756评论 28 53

友情链接更多精彩内容