首页 > 常识 >

查找算法有哪些

时间:

查找算法是用于在数据集合中查找特定元素的算法,根据不同的数据结构和效率要求,有多种查找算法。以下是一些常见的查找算法:

顺序查找(Sequential Search)

原理:逐个遍历数据集来查找目标元素。

时间复杂度:O(n)。

适用场景:适用于无序的数据集合。

代码示例

```python

def linearSearch(arr, val):

for i in range(len(arr)):

if arr[i] == val:

return i

return -1

```

二分查找(Binary Search)

原理:在有序数据集合中,从中间位置作为起点不断划分区间并查找。

时间复杂度:O(log n)。

适用场景:适用于有序的数据集合。

代码示例

```python

def binarySearch(arr, low, high, val):

while low <= high:

mid = (low + high) // 2

if arr[mid] == val:

return mid

elif arr[mid] < val> low = mid + 1

else:

high = mid - 1

return -1

```

插值查找(Interpolation Search)

原理:在有序数据集合中,根据目标元素与数据集合首尾之间的差值,利用插值估算目标元素的位置。

时间复杂度:O(log log n)或O(n)。

适用场景:适用于均匀分布的有序数据集合。

代码示例

```python

def interpolationSearch(arr, val):

low = 0

high = len(arr) - 1

while low <= high and val >= arr[low] and val <= arr[high]:

if low == high:

if arr[low] == val:

return low

return -1

pos = low + int(((float(high - low) / (arr[high] - arr[low])) * (val - arr[low])))

if arr[pos] == val:

return pos

if arr[pos] < val> low = pos + 1

else:

high = pos - 1

return -1

```

斐波那契查找(Fibonacci Search)

原理:在有序数据集合中,根据斐波那契数列调整中间点的位置来查找。

时间复杂度:O(log n)。

适用场景:适用于有序的数据集合。

代码示例

```python

def fibonacciSearch(arr, val):

fib2 = 0

fib1 = 1

fibm = fib2 + fib1

while fibm < len> fib2 = fib1

fib1 = fibm

fibm = fib2 + fib1

offset = -1

while fibm > 1:

i = min(offset + fib2, len(arr) - 1)

if arr[i] < val> fibm = fib1

fib1 = fib2

fib2 = fibm - fib1

offset = i

elif arr[i] > val:

fibm = fib2

fib1 = fib1 - fib2

fib2 = fibm - fib1

else:

return i

if fib1 and offset + 1 < len xss=removed> return offset + 1

return -1

```

B树查找(B-Tree Search)

原理:在平衡的B树中查找元素。

时间复杂度:O(log n)。

适用场景:适用于B树数据结构。

代码示例