【面试大全】【数据结构】【七大查找算法】

数据结构之查找


文章目录

  • 数据结构之查找
  • 前言
  • 一、顺序查找
    • LeetCode
    • 是什么?
    • 适用情况
    • 时间复杂度
    • 代码
  • 二、二分查找
    • LeetCode
    • 是什么?
    • 适用情况
    • 时间复杂度
    • 代码
  • 三、插值查找
    • LeetCode
    • 是什么?
    • 适用情况
    • 时间复杂度
    • 怎么做?
    • 特点
    • 代码
  • 更新记录


前言

【面试大全】【数据结构】【七大查找算法】_第1张图片


一、顺序查找

LeetCode

//待更新

是什么?

顺序查找也称为线性查找,用逐一比较的办法顺序查找关键字

适用情况

普遍都适用

时间复杂度

O(n)

代码

public static int OrderFind(int[] nums,int target)
	{
	    for (int i = 0; i < nums.Length; i++)
	    {
	        if (nums[i] == target) return i;
	    }
	    return -1;
	}
}

二、二分查找

LeetCode

704.二分查找

是什么?

【面试大全】【数据结构】【七大查找算法】_第2张图片

适用情况

升序或者降序序列

时间复杂度

O(Log2n)

代码

public static int ErFind(int[] nums, int target)
{
    int left = 0, right = nums.Length - 1;
    while (left<=right)
    {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) return mid;
        else if (nums[mid] > target) right = mid - 1;
        else left = mid + 1;
    }
    return -1;
}

三、插值查找

LeetCode

//待更新

是什么?

作为改进版的二分查找算法。

适用情况

升序或者降序序列

时间复杂度

平均情况 O(loglog (n)),最坏 O(log (n))

怎么做?

插值查找算法的解题思路和二分查找算法几乎相同,唯一的区别在于,每次与目标元素做比较的元素并非搜索区域内的中间元素,此元素的位置需要通过如下公式计算得出:

Mid = Begin + ( (End - Begin) / (A[End] - A[Begin]) ) * (X - A[Begin])

  • Mid:计算得出的元素的位置;

  • End:搜索区域内最后一个元素所在的位置;

  • Begin:搜索区域内第一个元素所在的位置;

  • X:要查找的目标元素;

  • A[]:表示整个待搜索序列。

特点

当有序序列中的元素呈现均匀分布时,插值查找算法的查找效率要优于二分查找算法;反之,如果有序序列不满足均匀分布的特征,插值查找算法的查找效率不如二分查找算法。

代码

 public static int ErFind(int[] nums, int target)
 {
     //插值查找
     int left = 0, right = nums.Length - 1;
     while (left < right) 
     {
         //int mid = left + (right - left) / 2;
         int mid = left + ((right - left) / (nums[right] - nums[left])) * (target - nums[left]);
         Console.WriteLine(mid);
         if (nums[mid] == target)
         {
             return mid;
         }
         else if(nums[mid] > target)
         {
             right = mid - 1;
         }
         else
         {
             left = mid + 1;
         }
     }
     return -1;
 }

更新记录

  • 2023-2-20 更新二分查找
  • 2023-2-23 更新插值查找

你可能感兴趣的:(面试汇总,数据结构,面试,leetcode)